中央サーバーと複数のクライアントとのチャットなどのネットワークアプリケーションを実装するとします。すべての通信は中央サーバーを経由する必要があり、次にいくつかのクライアントからメッセージを取得してターゲットクライアントに転送する必要があります。すぐ。
使用されているテクノロジ(ソケット、Webサービスなど)に関係なく、プロデューサースレッド(メッセージを生成する)とコンシューマースレッド(メッセージを読み取る)がいくつかあると考えることができます。
たとえば、着信メッセージと発信メッセージに単一のキューを使用できますが、単一のキューを使用すると、一度に1つのスレッドしかキューにアクセスできないため、メッセージの送受信を同時に行うことはできません。
おそらく、2つのキューを使用する方が適切でしょう。たとえば、この記事では、プロデューサーとコンシューマーがほぼ同時に作業できるように、ダブルキューを管理する方法について説明します。このシナリオは、プロデューサーとコンシューマーしかない場合は問題ないかもしれませんが、クライアントが多い場合は次のようになります。
- 中央サーバーが複数の入力ストリームから同時にデータを受信できるようにするにはどうすればよいですか?
- 中央サーバーが複数の出力ストリームに同時にデータを送信できるようにするにはどうすればよいですか?
この問題を解決するために、私の考えは、クライアントごとに二重キューを使用することです。中央サーバーでは、各クライアント接続を2つのキューに関連付けることができます。1つはそのクライアントからの着信メッセージ用で、もう1つはそのクライアント宛ての発信メッセージ用です。このようにして、中央サーバーは、クライアントとのほぼすべての接続で同時にデータを送受信できます...
キューを管理する方法はおそらく他にもあります...必要なキューの数とそれらを整理する方法を決定するためのパラメーターは何ですか?キューを必要としない場合がありますか?