我想减少TCP服务器的延迟。所以我读了一下,并使用了TCP_NODELAY。大!整体延迟下降了一点!现在我在想,我可能也可以在阅读时减少延迟。但我不太了解TCP堆栈的行为。举例来说,在接收端的以下代码中,如果发送者只发送一个25字节的数据包,会发生什么?读取TCP缓冲
BUFFER_SIZE = 4096
char buffer[BUFFER_SIZE];
received = read (common_socket, buffer, BUFFER_SIZE);
我特别的问题是,如果套接字被阻塞,当读取的调用将返回?是否有任何情况下,TCP会在读取通话返回之前等待更多的数据到达?
如果你没有设置Nagle的TCP_NODELAY,实际上对2的回答是YES。即使设置了这个位,操作系统tcp堆栈实现也可以在回调它之前自由地等待其他数据。我肯定看到发生这种情况的情况。如果你想真的加快速度,你需要用专用网卡(例如SolarFlare)来完成用户空间中的所有事情。 –
@dau_sama现在我很困惑! – dsign
阅读了tcp的工作原理,不仅仅是Nagle算法,它是一个相当复杂的协议。为了您的目的,除非您需要非常低的延迟,否则您拥有的应该足够了。如果你想达到纳秒性能,那是另一回事。 –