我在 Linux 平台上使用阻塞 BOOST ASIO 套接字。在一些 read() 操作中,我看到了 500+ 毫秒的巨大延迟。(通常延迟很好,但如此巨大的延迟之一是不可接受的)
我已经使用该选项禁用了 Nagle 算法
_socket->set_option( tcp::no_delay( true) );
我尝试在互联网上搜索,似乎还有其他东西,如延迟确认和 PUSH 标志,可以确保这种延迟消失。
我正在使用 Linux,PUSH 标志设置可能在 Linux 中不可用。不确定 BOOST 上的延迟确认设置。(我应该使用从 boost 套接字中提取的本机套接字描述符吗?)
结束这个问题,延迟来自接收方。客户端和服务器之间实现的底层协议是这样的,接收者不会给发送者一个标志来发送更多的数据包。在 TCP 级别上什么都没有。应用程序级别的实现很糟糕。