客户端和服务器运行在同一台机器上,客户端通过127.0.0.1连接到服务器
通过两个 send() 调用(标头和正文)发送消息,
服务器epoll_wait()和recv()数据,
问题是第二个wait()有40ms的延迟,这导致吞吐量低约11kB/s。
带有时间戳的客户端日志
[ 1585038.0005] start send 56
[ 1585038.0006] end send 56
[ 1585038.0006] start send 512
[ 1585038.0006] end send 512
服务器时间戳
[ 1585038.0002] epoll_wait
[ 1585038.0006] start recv 56
[ 1585038.0006] recv return 56
[ 1585038.0006] start recv 512
[ 1585038.0006] recv return -1
[ 1585038.0006] epoll_wait
[ 1585038.0442] epoll_wait return 1
[ 1585038.0443] start recv 512
[ 1585038.0443] recv return 512
第二个 epoll_wait() 在 0.442 返回有 40ms 的延迟
我必须禁用 nagle 算法
int socket_set_nagle(int sock, int enable)
{
int ret;
ret = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int));
if (ret < 0)
ERROR("set socket nodelay option failed: %m\n");
return ret;
}