私は、3つの組み合わせがTCPで200msの遅延のようなものを引き起こすことを読みました:Nagleのアルゴリズム、遅延確認応答、および「書き込み-書き込み-読み取り」の組み合わせ。ただし、Javaソケットではこの遅延を再現できないため、正しく理解したかどうかはわかりません。
ループバックアドレスを介してソケットを使用する2つのスレッドを備えたJava7を搭載したWindows7でテストを実行しています。ソケットのtcpNoDelayオプション(デフォルトではfalse)に触れたり、OSのTCP設定を試したりしていません。クライアントのコードの主な部分は次のとおりです。サーバーは、クライアントから2バイトを受信するたびに1バイトで応答しています。
for (int i = 0; i < 100; i++) {
client.getOutputStream().write(1);
client.getOutputStream().write(2);
System.out.println(client.getInputStream().read());
}
遅れは見られません。なぜだめですか?