【发布时间】:2011-10-07 07:07:31
【问题描述】:
根据this Socket FAQ article 的说法,Nagle 的算法是许多算法之一,它可以导致一堆数据位于 TCP 缓冲区中而不会到达网络。 Nagle 算法的延迟最高可达 200 毫秒。
出于某种原因,Nagle 的算法可以完全关闭,但不能只刷新一次。这对我来说真的很令人费解。为什么没有办法说“就这一次,不要等待更多数据。就当Nagle的200ms到了。”
这难道不是很有意义吗?在根本不使用 Nagle、始终使用 Nagle 和从头实现自己的协议之间取得良好的平衡吗?
【问题讨论】:
-
Nagle 的算法不会延迟您的第一个
send()。如果第一个send()的确认尚未到达,它只会延迟您的第二个send()。因此,避免 Nagle 算法造成的延迟的一种方法是将尽可能多的 send() 操作合并为一个。