我有两个进程通过TCP套接字相互通信。进程A向进程B发送请求并等待响应。进程B处理请求,并发送响应。对于某些请求,没有必要将响应发送回进程A.
假设进程A首先发送不需要响应的请求X,并且在发送了需要响应的请求Y之后立即发现,当A等待其套接字上的数据时,观察到明显的小延迟(~0.04) S)。这是控制流程:
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响应的情况下引起的小延迟吗?
答案 0 :(得分:3)
这就是答案:
http://en.wikipedia.org/wiki/Nagle_algorithm
您的数据已排队但未发送。您需要设置套接字选项(TCP_NODELAY)以防止这种情况,或使用其他传输协议(如UDP)。您可以在'man tcp'中获得更多信息。
答案 1 :(得分:2)
可能是由Naggle's algorithm引起的。