多くの場合、多くのクライアントが同じファイルを必要とするため、インターネット経由で Java サーバーから C++ クライアントにファイルを高速で転送する必要があります。ファイルを送信するために適切に最適化された関数のように聞こえる Java の transferTo() を見ていました。しかし、いつ transferTo() を使用して C++ でそれを受け取るのが最適なのかわかりません (つまり、単なる生データ転送なのか、クライアント側でファイルがいつ終了したかを判断する方法など)。これは、Windows と Linux の両方で動作する必要があります。また、transferTo() 以外に、特に多くのクライアントが通常同じファイルを必要とするという事実を利用して、より効率的にする方法はありますか? マルチキャストなどの言い方がわかりません。また、VPNではなくアプリケーションレベルのセキュリティを使用しており、JavaサーバーではAESで暗号化し、MACデジタル署名を使用しています。そのため、C++ 側の暗号を最小限の負担で処理するためのクロスプラットフォーム ライブラリの推奨事項も探しています。私は C++ に非常に精通していますが、ネットワーク プログラミングの経験がないため、提案よりも考慮してください。ありがとう。
4 に答える
組み込みWebサーバー?http-転送はあなたにとって十分効率的ですか?
私が見た中で最も単純な埋め込み可能なJavaWebサーバーは、http://acme.com/java/software/Acme.Serve.Serve.htmlです。作業中の生産では埋め込み型Jetty6を使用していますが、これにはより多くのエルボーグリースが必要です。
クライアントが最初にWebサーバーの場所を知らない場合は、Zeroconfを使用してアナウンスすることを検討してください。http://jmdns.sourceforge.net/
スケーラビリティの理由から、http を使用するという Thorbjørns の提案は、キャッシング用の http プロキシを簡単に設定したり、標準の負荷分散ツールを使用したりできるため、非常に良いアイデアのように思えます。
単なるデータの塊以上のものを転送したい場合は、googles プロトコル バッファを確認することをお勧めします。これらは、Java および C++ 側での非常に簡単で高速なエンコード/デコードを可能にします。
ファイルをチャンク化し、UDP データグラム経由で送信することを検討してください。C++ は、受け取ったときに再コンパイルできます。既存の P2P プロトコル実装の実装/組み込みを検討しましたか?
多くのクライアントへの効率的な転送が必要な場合、ボトルネックはサーバーです。
これについては、クライアント間の転送を分散するビット トレント プロトコルを参照してください。