Netty上のアプリケーションで、tcpNoDelay
をtrueに設定しています(サーバーと "子"ソケットの両方)。 -vN
(Nはクライアントバッファを無効にする)で私のサーバーに「巻き」、そしてチャネルにデータをゆっくり書込み、何らかのバッファ制限に達するまでクライアントに伝播するものは何もなく、クライアントにプッシュされます。チャンクされたデータを書き戻していることに注意してください(クライアントが閉じるまで、クライアントは接続されたままです)。書き込み時のNettyバッファリング応答
Wiresharkを使用して、バッファ制限に達するまでクライアントに何も送信されないことを確認してから、クライアントにTCPパケットの束が溢れるのを確認しました。
理想的には、これは滑らかでなければなりません。不思議なことに、ローカルマシン(Mac OS X Lion、Java 1.6.0_31)で実行するインスタンスでは、これは起こりません。 Ubuntu、Java 1.6.0_20のサーバ上にのみ表示されます。 _20から_31までのわずかなバージョンの不一致が理由だとは想像できません。
サーバーオプションが設定されている:
nioStreamBootstrap.setOption("child.tcpNoDelay", true);
nioStreamBootstrap.setOption("child.keepAlive", true);
nioStreamBootstrap.setOption("tcpNoDelay", true);
クライアントの "カール":
curl -vN http://my.remote.server/some/path
私のログには書き込みを示し、クライアントチャネルに作られている:
--- Message received from downstream
--- Writing message upstream
--- Message received from upstream
--- Writing message downstream
(なお、 「メッセージダウンストリームの作成」コールは、channel.write(obj)
コールの直前にあります)
OS関連、Java関連、Netty関連のいずれかがわかりません。提案?