无法在Java websocket中获取除当前客户端之外的打开会话。

时间:2017-07-25 01:59:09

标签: javascript java sockets websocket java-websocket

我正在编写一个简单的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();
            }
        }

1 个答案:

答案 0 :(得分:0)

默认情况下,websocket为来自client.so的每个请求创建一个新服务器(Endpoint)。当您进行session.getOpenSessions()时,返回相同的会话。 使服务器端点单例。link