cometd bayeux:在页面卸载时正确处理用户断开连接

时间:2010-10-12 06:53:42

标签: cometd

当前设置:带有jQuery cometd插件的cometD servlet。

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

  

$(窗口).unload(函数(){
        / **让我们通知其他用户currentUserId离开** /

     

});

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

我能想到的唯一解决方案是使用setInterval,每隔1分钟,管理员将遍历一个连接用户数组,然后“ping”它们以检查它们是否仍然连接。

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

2 个答案:

答案 0 :(得分:2)

对于有兴趣的人。

当服务器使用户的会话失效时,您可以注册“removeListener”方法。

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

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

答案 1 :(得分:0)

是的我知道这个问题已经过时了,但为什么不简单地使用PresenceListener?