【问题标题】:Unable to get open sessions other than current client in Java websocket.无法在 Java websocket 中获取当前客户端以外的打开会话。
【发布时间】:2017-12-30 18:03:04
【问题描述】:

我正在编写一个简单的网络套接字聊天应用程序。当我打开套接字时,我会发送一条消息以加入房间并带有名称,并且 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();
            }
        }

【问题讨论】:

    标签: javascript java sockets websocket java-websocket


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2019-07-17
      • 1970-01-01
      相关资源
      最近更新 更多