2017-03-27 15 views
1

ソケットチャネルに書き込むためにJavaハンドラを使用してJava nio AsynchronousServerSocketChannelを使用しています。Javaソケットを使用して大量のデータを転送する

ソケットは、同じシステムで実行されている2つのプロセス間でローカルに通信するために使用されます。

かなり大きなデータを転送する傾向があります。データをチャンク形式で転送するには、バッファサイズ16384を使用します。 UDP経由の送信はオプションではありません。

ソケットチャネルのパフォーマンスを向上させるか、転送されるペイロードを減らすために他に何かできることはありますか?

よろしく、 Saurav

+0

あなたはそれを圧縮することができます。サイズを縮小する(明らかに)が、全体的なパフォーマンスについてはわかりません。 –

+0

いくつかの圧縮手法を使用できます – opensam

+0

非常に大きなバッファを使用し、チャンク形式で転送しないでください。可能であればTCPストリームを流してください。大きなソケットの送受信バッファを使用します。 TCPを考え直さないでください。あなたはしません。 – EJP

答えて

0

あなたが考えることができる選択肢の数があります。適切なハードウェアを選択するためには、それぞれのハードウェアを実際に実装してアプリケーションでテストする必要があります。

  1. 現在の方法を調整することができます。いくつかの考え:はるかに大きなバッファー、ダブルバッファー(ライターは常に書き込み可能なソケットを持っているので、リーダーは常に読むことができるように2つのバッファーを使用)、差異を送信する(データを連続的に送信および更新している場合)
  2. 共有メモリやメモリマップファイルなど、全く異なるアプローチを使用します。あなたが始められるかもしれない多くの良い答えを持つ2つの質問:thisthat

詳細は個々の環境によって異なりますが、現在のソケット実装よりも10倍(あるいはそれ以上)の通信速度が向上する可能性があります。

+0

あなたの返信のRobに感謝します...私はメモリマップされたファイルのコンセプトが好きです...しかし、Java apisは非永続メモリマップされたファイルをサポートしています..私はここで質問しているhttp://stackoverflow.com/questions/43190764/support -for-non-persisted-memorymappedfile – saurav

関連する問題