Webソケットを介して特定のユーザーにメッセージを送信します。これまでのところ、Webソケットを開いてクライアントからメッセージを読むことができます。Webソケットを介して接続しているユーザーにメッセージを送信するにはどうすればよいですか?
@ServerEndpoint(value = "/wsep")
public class WebSocketEndpoint {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketEndpoint.class);
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
try {
session.getBasicRemote().sendText("You are connected. Your ID is " + session.getId());
} catch (Exception e) {
LOGGER.error("Error on open web socket", e);
}
}
@OnMessage
public void onClientMessage(String message, Session session) {
LOGGER.info("Message from {} is: {}", session.getId(), message);
}
@OnClose
public void onClose(Session session) {
this.session = null;
LOGGER.info("{} disconnected", session.getId());
}
}
私は、ユーザ宛のメッセージを作成する独立したサービスを持っています。
public class Message {
private String fromUserName;
private String toUserName;
private String content;
...
}
新しいメッセージが私のMessageService
で作成されたとき、私は彼が接続されている場合は、受信機に知らせたい:私Message
クラスは、単純なPOJOです。私はこの方法WebSocketEndpoint.onServerMessage
追加する必要が思う:
public void onServerMessage(Session session, Message message) {
session.getBasicRemote().sendText(message.getContent());
}
をしかし、私は働くことのような何かをする方法がわかりません。
実装が間違っているようです。あなたは、キーがidであるSessionを格納するために静的マップを使用するか、何かが参照/識別子である必要があります。 - クライアントが接続されている場合は、そのセッションをマップに保存します。 - クライアントが閉じられたら、そのセッションをマップから削除します。 - 新しいメッセージが作成されると、idで検索し、そのセッションを使用してメッセージを送信します。 –