2

非常に低速なネットワーク接続を介してルーティングされるタイム クリティカルなメッセージを処理しています。Java TCP/IP ソケットを使用して元のサーバー (制御できない) に接続しています。データの長さはさまざまですが、通常は約 5000 バイトであるため、最終的には約 1400 バイトの複数のパケットに分割されます。

Java クライアント側コードで、データの送信に使用されるパケットのサイズを制御できる方法はありますか? 500 バイト パケットなど、より小さなパケット サイズを明示的に使用して実験したいと思います。これにより、ヘッダー オーバーヘッドの増加という (考えられる) コストで、メッセージの最初のバイトを受信するのにかかる時間が短縮されます。

4

4 に答える 4

2

サーバーを制御または変更できない場合は、クライアントからこれを制御できるとは思いません。サーバーがデータを1500バイトのイーサネットフレームにパックし(詳細はこちらを参照)、データの配信を最適化しようとしていると思われます。

この1500バイトはMTUと呼ばれます。OS層でこれをいじることもできるかもしれませんが、それはあなたに悲しみをもたらすだけだと思います。

于 2009-03-16T10:11:33.770 に答える
1

少量のバイトの後でSocketOutputStreamsをフラッシュしてみることができます。ただし、システムに依存するため、より小さなパケットが作成されるはずですが、保証されません。

于 2009-03-16T10:05:20.227 に答える
1

最初の読み取りのレイテンシを解決する方法の 1 つは、クライアント リクエストの TCP/IP ヘッダーに PUSH または URG フラグを設定することでした。私の知る限り、標準の Java ソケット ライブラリではこれを行うことはできませんが、次の場所にライブラリがあります。

http://www.savarese.org/software/vserv-tcpip/

それは明らかにそうです。

免責事項: これは(Java 1.1.8 だと思います) 昔のことで、Windows でしか使用していませんでしたまた、私は Savarese ライブラリを使用していないため、保証できません。

于 2009-03-16T10:16:18.547 に答える
0

最初のデータを受信するまでの時間を短縮したい場合は、Socket.setTcpNoDelay(true); を設定してみてください。 setTcpNoDelay

于 2009-03-16T21:50:59.127 に答える