【问题标题】:JavaEE Websocket: closing browser tab closes all sessions irrespective of browserJavaEE Websocket:关闭浏览器选项卡会关闭所有会话,而与浏览器无关
【发布时间】:2014-09-04 15:52:26
【问题描述】:

我有一个 websocket 端点

@ServerEndpoint("/tweets")
public class TweetStreamServer {
    private static final Logger LOGGER = LoggerFactory.getLogger(TweetStreamServer.class);

    @OnMessage
    public void tweets(final String message, final Session session) throws IOException, InterruptedException {
        System.out.println("session id:" + session.getId() + ", search term: " + message);
        final Client twitterClient = TwitterHoseBird.getInstance(message);
        while (!session.getOpenSessions().isEmpty()) {
            for (final Session s : session.getOpenSessions()) {
                if (twitterClient.isDone()) {
                    System.out.println("Twitter Client Done, waiting ...");
                }
                s.getBasicRemote().sendText(TwitterHoseBird.getMsgQueue().take());
            }
        }
    }
}

我在WildFly 8.1.0 Final 上部署它。然后我在ChromeSafari 上打开多个选项卡并运行以下命令

var connection = new WebSocket('ws://127.0.0.1:8080/tweetstream-1.0-SNAPSHOT/tweets');
connection.onopen = function () {
  connection.send('germany');
};
connection.onerror = function (error) {
  console.log('WebSocket Error ' + error);
};
connection.onmessage = function (e) {
  console.log('Server: ' + e.data);
};
connection.onclose = function (e) {
  console.log('closing session');
};

然后所有选项卡开始从服务器接收数据。

  • 然后,当我在其中一个选项卡上执行connection.close(); 时,只有该连接中断,而所有其他选项卡仍在接收数据
  • 但是,如果我关闭其中一个选项卡(在任何浏览器中),在所有其他选项卡中打开的所有会话都会关闭会话并显示 closing session 消息

问题
- 如果用户在一个浏览器中关闭一个选项卡,所有其他选项卡仍应接收数据,这不是一个有效的用例吗?
- 您是否发现我正在做的任何错误/问题?
- 我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: java javascript session jakarta-ee websocket


    【解决方案1】:

    而不是使用

    s.getBasicRemote().sendText(TwitterHoseBird.getMsgQueue().take());  
    

    改成

    s.getAsyncRemote().sendText(TwitterHoseBird.getMsgQueue().take());  
    

    其他一切都很好锻炼

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 2013-11-03
      • 1970-01-01
      • 2019-05-13
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多