2

オブザーバーパターンでできるだけ早く複数のクライアントにデータをストリーミングする必要があるサーバーがあります。

クライアントがサーバーから切断されるまで、毎秒少なくとも200のメッセージを各クライアントに送信する必要があり、各メッセージはいくつかのプリミティブ型の8つの値で構成されます。各メッセージは作成後すぐに送信する必要があるため、メッセージを1つの大きなメッセージに結合することはできません。サーバーとクライアントの両方が同じLAN上にあります。

この状況でストリーミングを実装するには、RMIとソケットのどちらのテクノロジーが適していますか?

4

3 に答える 3

3

RMIのオーバーヘッドは大きいため、適切ではありません。単純なプロトコルを作成し、ソケットを使用してデータを送信することをお勧めします。

許容できるレイテンシに応じて、ソケットバッファサイズを構成し、Nagleアルゴリズムをオフにする必要があります。

于 2012-11-13T17:34:17.807 に答える
2

これにはRMIを使用しません。RMIはリモートメソッド呼び出しのためだけにあります。つまり、クライアントがサーバー側でメソッド(つまりビジネスロジック)を実行したい場合です。

これにはソケットで問題ありませんが、この特定のシナリオではJMS(Javaメッセージングサービス)を検討することをお勧めします。JMSは、トピックと呼ばれるものをサポートします。これは、基本的に、そのトピックに関心のあるすべてのリスナーにブロードキャストされます。また、一般的に非常に高速になるように最適化されています。

Apache ActiveMQのようなものを使用して、目的を達成できます。また、永続性(キューがダウンした場合のメッセージはキューに残っている)、メッセージの有効期限(クライアントがメッセージを取得しない場合にメッセージを古くしたい場合)などの多くのオプションがあります。

もちろん、通常のソケットを使用してこれらすべてを実装し、すべてを自分で処理することができますが、JMSはこれらすべてを提供します。テキストやバイナリデータ、さらにはシリアル化されたオブジェクトを送信できます(個人的には後者をお勧めしません)。

于 2012-11-13T17:41:26.080 に答える
1

RMIは要求/応答プロトコルであり、ストリーミングプロトコルではありません。TCPを使用します。

于 2012-11-14T03:40:39.200 に答える