我想通過網絡套接字發送消息給特定用戶。到目前爲止,我可以從客戶端打開一個網頁插座和閱讀的消息像:如何通過網絡套接字將消息發送給已連接的用戶?
@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());
}
}
我有目的地到用戶創建消息的獨立服務。我Message
類是一個簡單的POJO:
public class Message {
private String fromUserName;
private String toUserName;
private String content;
...
}
當我MessageService
創建一個新的消息,我想,如果他被連接到通知接收機。我想我要補充的方法WebSocketEndpoint.onServerMessage
:
public void onServerMessage(Session session, Message message) {
session.getBasicRemote().sendText(message.getContent());
}
但我不知道該怎麼做這樣的事情,其工作原理。
似乎你的實現是錯誤的。你應該使用一個靜態映射來存儲Session,key是id或者可以是引用/標識符。 - 連接客戶端時,將其會話存儲到地圖。 - 客戶關閉時,從地圖中刪除其會話。 - 創建新消息時,按ID查找並使用該會話發送消息。 –