相互に通信する必要のある複数のクライアントを備えたTCPベースのNettyアプリケーションがあります。すべてのチャネル参照をChannelGroupに保存します。
ChannelGroup.writeを呼び出すことで、ChannelGroup内のすべてのクライアントに書き込むことができることはわかっていますが、これらのチャネルの1つを除くすべてに書き込むための効率的な方法は次のようになります。
「A」、「B」、「C」は一緒にチャネルグループにあり、「A」は「B」と「C」に送信する必要があり、「B」は「A」と「C」に送信する必要があります。これを行うための最良の方法は何でしょうか?これが私が考えたいくつかのオプションですが、いくつかのフィードバックをいただければ幸いです。
グループを繰り返し処理し、チャネルに個別に書き込みます(この場合はChannelGroup.writeを使用しないでください)
ChannelGroupを繰り返し「リメイク/クローン」して、書き込み先のチャネルのみが含まれるようにします。次に、変更したグループでChannelGroup.writeを呼び出し、グループを完全なグループに復元します。
すべてのチャネルに書き込みますが、(エンコードまたはダウンストリームハンドラーのいずれかで)破棄するハンドラーロジックを実装し、除外されたチャネルからのメッセージの場合はメッセージを書き込みません。
設計上のトレードオフに関する限り、メッセージは可能な限り迅速に送信され、ChannelGroupsは比較的小さく<20チャネルであり、メッセージのサイズはそれぞれ約1kb(500バイト-2 kb)です。また、異なるロジックがローカルホストのフィードバックに対してより適切に機能する場合、接続の多くがサーバーと同じホスト上にあるというシナリオがあります。
助けてくれてありがとう!