我正在编写一个简单的Web套接字聊天应用程序。当我打开套接字时,我发送一条消息以使用名称加入房间,并且Web套接字返回更新的房间对象,显示当前用户名。
我正在尝试将带有用户名的更新房间发送到所有打开的连接,所以如果我打开2个浏览器标签,我应该看到一个标签添加的用户反映在另一个标签中,但是我没有看到。在session.getOpenSessions()
上进行调试时,我只看到一个会话。我希望也能看到其他浏览器标签的连接。
JS
window.onload = function() {
var socket = new WebSocket('ws://localhost:8080/chat/roomName');
socket.onmessage = function(event) {
document.getElementById('message').message.innerHTML = event.data;
};
socket.onopen = function(event) {
socket.send('{"command":"join", "value":"MyName"}');
};
}
Web套接字代码
@OnOpen
public void onOpen(Session session, @PathParam("roomName") String roomName) throws IOException, EncodeException {
currentSession = session;
session.getBasicRemote().sendObject(getRoom(roomName));
}
正在加载
for (Session session: currentSession.getOpenSessions()){
try {
if(session.isOpen() && session.getUserProperties().get("roomName").equals(room.getRoomName())){
session.getBasicRemote().sendObject(room);
}
} catch (Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:0)
默认情况下,websocket为来自client.so的每个请求创建一个新服务器(Endpoint)。当您进行session.getOpenSessions()时,返回相同的会话。 使服务器端点单例。link