JSR-356 でサーバーが開始した WebSocket メッセージをブロードキャストするベスト プラクティスは何ですか?
明確にするために、注釈を使用するときに返信やブロードキャストがどのように機能するかは知って@OnMessage
いますが、最初にクライアントからメッセージを受信せずにサーバーからイベントを送信したいと考えています。MessageServerEndpoint
つまり、以下のコードのインスタンスへの参照が必要だと思います。
次の解決策を見てきましたが、静的メソッドを使用しており、あまりエレガントではありません。
@ServerEndpoint(value = "/echo")
public class MessageServerEndpoint {
private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
sessions.remove(session);
}
// Static method - I don't like this at all
public static void broadcast(String message) {
for (Session session : sessions) {
if (session.isOpen()) {
session.getBasicRemote().sendText(message);
}
}
}
}
public class OtherClass {
void sendEvent() {
MessageServerEndpoint.broadcast("test");
// How do I get a reference to the MessageServerEndpoint instance here instead?
}
}