1

我有两个进程通过 TCP 套接字相互通信。进程 A 向进程 B 发送请求并等待响应。进程 B 处理请求,并发送响应。对于某些请求,不需要将响应发送回进程 A。

假设进程 A 首先发送一个不需要响应的请求 X,然后立即发送一个需要响应的请求 Y,当 A 在其套接字上等待数据时观察到明显的小延迟(约 0.04 秒)。这是控制流程:

A sends X
A sends Y
B handles X
B handles Y and writes response
(small delay in waitForReadyRead() in A of ~0.04s)
A receives response for Y

当我也为 X 引入响应并让 A 等待该响应时,延迟消失了,控制流程如下所示:

A sends X
B handles X and writes response
A receives response for X
A sends Y
B handles Y and writes response
A receives response for Y

这显然是某种同步问题,但我无法解释。谁能解释如果 B 没有为 X 发送响应而引起的小延迟?

4

2 回答 2

3

这是答案:

http://en.wikipedia.org/wiki/Nagle_algorithm

您的数据已排队并没有发送出去。您需要设置一个套接字选项 (TCP_NODELAY) 来防止这种情况,或者使用其他一些传输协议,如 UDP。您可以在“man tcp”中获得更多信息。

于 2013-01-04T12:28:47.830 回答
2

这可能是由Naggle 算法引起的。

于 2013-01-04T12:33:49.057 回答