0

1440バイトのペイロードを持つTCPパケットをWindowsXPOSに非常に高速に送信するデバイスがあります。TcpAckFrequencyを0に設定しました。つまり、パッケージを受け取った直後にACKを送り返します。ソケットをスレッドで読み取るJavaアプリケーションを作成しました。

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
in.read(charArray, 0, 720);

私の問題は、いくつかの(50-60)パケットを受信した後、Windowsバッファがいっぱいになり、その後、通信を遅くするDUPACKを送信することです。

私はいつもバッファを読んでいるので、なぜいっぱいになるのかわかりませんか?

4

1 に答える 1

1

考えられる理由の1つは、Javaアプリケーションが追いつけないことです。つまり、デバイスがデータを送信しているときほど速くデータを処理することはできません。それが問題である場合は、アプリケーションがデータをより高速に処理できるようにするソリューションを考え出す必要があります。

複数のコアがある場合は、Javaアプリケーションをリファクタリングして、1つのスレッドを使用してソケットからデータを読み取り、別のスレッドを使用して処理を行うことで、スループットを向上できる場合があります。

別の解決策は、Javaアプリケーションのプロファイルを作成して、最適化を調整する余地があるかどうかを確認することです。

最後に、に大きなバッファサイズを使用することで、スループットを向上させることができる場合がありますBufferedReader

于 2012-04-18T12:26:23.710 に答える