我是套接字编程的新手(正如你已经通过我的愚蠢问题弄清楚的那样),但是把我的耻辱放在一边,我正在使用TCP posix编写一个程序。我的约束如下:从客户端发送到服务器的消息应该作为字节流读取,而我的应用程序性能不高时,应该尽快传递消息。我编写了一个TCP客户端类,目的是执行以下操作:1个连接 - 多个发送 - 并且在流式传输结束时关闭1个。问题是消息不能近乎实时地传递(我假设它等待拥有更大的包更好 吞吐量)在网上做了一些研究后,我发现虽然你可以禁用Nagle算法(NA),但这样做是一个非常糟糕的主意。由于我是套接字编程的新手,我不想禁用我不完全理解的功能。所以我留下了两个(糟糕的?)选项:
没有留下插座还有其他解决方案吗?
感谢。
答案 0 :(得分:12)
在您的情况下,禁用Nagle正是您想要做的。
请记住,每次调用write()都会立即传输您的数据。因此,请确保将整个消息打包在一起,然后在准备发送时调用write()(或writev());不要用小有效负载重复调用write(),因为这样会很慢。
像你这样的情况正是他们让你禁用Nagle的原因。
答案 1 :(得分:2)
@Nemo为TCP提供了很好的建议。
但我建议你看一下UDP。 TCP可以在丢包期间引入任意延迟,并且“TCP公平性”基于强制丢包发生而工作。它不适合低延迟传输。想要禁用Nagle是一个强烈的迹象,表明你正在使用错误的协议。