当我们通过 TCP socket 分多次发送较少的数据时,比如小于 1460 或者 100 以内,对端可能会很长时间收不到数据,导致本端应用程序认为超时报错。这时可能是受到了 TCP NAGLE 算法的影响。
关于 TCP NAGLE 算法,可以参考这篇文章《TCP NAGLE算法和实现》以及《网络编程中Nagle算法和Delayed
ACK的测试》,这里只说程序上如何实现。代码如下:
int on = 1;
/* make socket here */
#ifdef WIN32
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (const char *)&on, sizeof(on));
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&on, sizeof(on));
#else
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on));
setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on));
#endif
在 Linux 或者 Android 上需要包含 <netinet/tcp.h> 。
经过上面的设置后,发送小数据可能会快一些。
分享到:
相关推荐
Nagle算法 TCP_NODELAY和TCP_CORK.zip
SO_REUSEADDR配置 & TCP_NODELAY1
Nagle算法规定,一个tcp链接上最多只能有一个未被确认的小分组。 如果ack响应到达前,tcp暂时收集待发数据,等到响应ack到达后使用一个分组将待发数据发送出去。 Nagle算法启动的条件,当一个ack会来之前,就有待...
NODELAY如何影响小包延时, 如何增加小包传输的实时性
Echo service using TCP sockets between two systems with socket options SO_REUSEADDR, SO_KEEPALIVE, TCP_NODELAY and SO_LINGER
然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送 最大连接数 在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中...
tcp_nodelay 超时 解析器 resolver_timeout 允许 否定 访问日志 方向对齐 client_body_buffer_size lua_code_cache lua_package_path lua_package_cpath process_by_lua process_by_lua_file lua_socket_...
client_body_timeout 3m; send_timeout 3m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65;
ffmpeg win版,用于测试rtmp
#设定mime类型,类型由mime.type文件定义 ... tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]."; #设定请求缓冲 client_header_buffer_size 128k; large_client_header_buffers 4 128k;
* TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8000 (#0) > GET / HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.61.0 > Accept: */* , 14 Nov 2023 14:35:10 GMT Hello, Falcon!
## Wakanda软件包管理器## 要查看简单的演示,请点击此链接 ###预安装Linux(作业系统... tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64
LwIP协议栈源码详解LwIP协议栈源码详解
tcp_nodelay on; } } 【注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载使用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等...
客户端设置套接字选项TCP_NODELAY=true以防止写入小消息时出现多毫秒延迟。 对 1.4.0 的更改 SDK 支持 StreamManager 客户端。 对 1.3.1 的更改 改进的日志级别粒度。 对 1.3.0 的更改 SDK 支持 SecretsMa
java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅。 1、java socket参数选项总览 在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x...
TcpNoDelayMod 我的世界1.7.2、1.7.10和1.8的伪造mod,将TCP_NODELAY设置为true,而不是常规的false。 这样可以减少游戏延迟,并提供更流畅的游戏体验。 在1.8.1及更高版本中不需要此mod,因为minecraft已经进行了...
默认启用TCP_NODELAY 无障碍 用法 npm i fetch-enhanced node-fetch const nodeFetch = require ( "node-fetch" ) ; const fetch = require ( "fetch-enhanced" ) ( nodeFetch ) ; await fetch ( ...
proxy-istio-demo ...* TCP_NODELAY set * Connected to localhost (::1) port 8888 (#0) > GET / HTTP/1.1 > Host: localhost:8888 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP>: java < respon
* TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8000 ( # 0) > GET / ? url=https://marcusnoble.co.uk/ HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.64.1 > Accept: * / * > < ...