1

TCPソケットを介して相互に通信する2つのプロセスがあります。プロセスAはプロセスBに要求を送信し、応答を待ちます。プロセスBは要求を処理し、応答を送信します。一部の要求では、プロセスAに応答を送り返す必要はありません。

プロセス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にその応答を待たせると、遅延はなくなり、制御の流れは次のようになります。

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などの他のトランスポートプロトコルを使用する必要があります。'mantcp'で詳細情報を取得できます。

于 2013-01-04T12:28:47.830 に答える
2

Naggleのアルゴリズムが原因である可能性があります。

于 2013-01-04T12:33:49.057 に答える