我正在编写一个简单的网络套接字聊天应用程序。当我打开套接字时,我发送一条消息以使用名称加入房间,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"}');
};
}
网络套接字代码
@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();
}
}
默认情况下,websocket 会在您执行 session.getOpenSessions(( 时为来自 client.so 的每个请求创建一个新服务器(端点(,返回相同的会话。 使服务器终结点成为单一实例 .link