【问题标题】:cometd bayeux: handling user disconnection properly on page unloadcometd bayeux:在页面卸载时正确处理用户断开连接
【发布时间】:2013-10-25 18:08:30
【问题描述】:

当前设置:cometD servlet 和 jQuery cometd 插件。

假设我有一个简单的聊天室,目前有 2 个用户(userA 和 userB)连接到它。当用户 B 离开页面时,我需要通知用户 A 用户 B 已离开房间。有没有办法让 userA 知道 userB 在不使用 unload 处理程序的情况下离开了?

$(window).unload(function(){
/** 让我们通知其他用户 currentUserId 离开了 **/

});

经过大量测试;上面的代码块不可靠。

我能想到的唯一解决方案是使用 setInterval,每隔 1 分钟,管理员将循环访问一组已连接的用户,然后“ping”他们以检查他们是否仍处于连接状态。

有什么想法吗?我应该使用 setInterval 轮询技术吗?

【问题讨论】:

  • 你好瑞恩。我遇到了同样的问题,奇怪的是 Cometd 库一开始就没有解决它。你找到答案了吗?这对我很有帮助。谢谢
  • 嗨 Yaron,我刚刚为这篇文章添加了答案。希望对您有所帮助!

标签: cometd


【解决方案1】:

对于这个有兴趣的人。

您可以在服务器使用户会话过期时注册“removeListener”方法。

    client.addListener(new ServerSession.RemoveListener() {
        public void removed(ServerSession session, boolean timeout){
            members.values().remove(session.getId());
            broadcastMembers(members.keySet());
        }
    });

完整代码示例: ChatService.java#handleMembership

【讨论】:

    【解决方案2】:

    是的,我知道这个问题很老,但为什么不简单地使用 PresenceListener?

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 2011-10-05
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多