多数の同時クライアントがあります。つまり、スレッドが実行され、同時に何かを実行しています。各クライアントは、イベントバスのリスナーを実装します。そのバスからのメッセージは、1つ以上のクライアントに到着する可能性があります。私の仕事は、そのメッセージをすべてのクライアントにブロードキャストすることです。
この作業は簡単に思えますが、なんらかの形で醜くない解決策を見つけることができません。
(1)簡単な解決策:
void onMessageArrived(Message message) {
broadcast(message);
}
- 複数のクライアントがそのメッセージを受信できるため、各メッセージが何度もブロードキャストされ、複数のonMessageArrivedハンドラーが実行される可能性があるため、これは悪いことです。
(2)ブロードキャストされたメッセージをいくつかのリストに保存できます。
void onMessageArrived(Message message) {
if (alreadyBroadcastedConcurrentMap.putIfAbsent(message)==null) {
broadcast(message);
}
}
- これにより、前述の問題は解決されますが、多くのクライアントは、既存のメッセージをそのリストに入れるという無駄な操作を繰り返します。
しかし、いくつかのより良いオプションがあるかもしれませんか?
Java。