2013-01-04 50 views
1

我有兩個進程通過TCP套接字彼此進行通信。進程A向進程B發送請求並等待響應。進程B處理請求併發送響應。對於某些請求,沒有必要將回復發送回進程A.如何解釋下面的QTcpSocket延遲?

假設進程A首先發送請求X,該請求不需要響應,並且緊接着發送請求Y,該請求確實需要響應,當A正在等待其插座上的數據(〜0.04s)時,觀察到明顯的小延遲。這是控制流:

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 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響應的情況下引發的小延遲嗎?

回答

3

這就是答案:

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

您的數據進行排隊並沒有發送出去。您需要設置一個套接字選項(TCP_NODELAY)來防止這種情況,或者使用其他一些傳輸協議,如UDP。您可以在'man tcp'中獲得更多信息。