如何检测用户的连接丢失或者他closures了Nodejs socket.io中的浏览器窗口

我有一个Node.js和Socket.io上的聊天应用程序,用户可以连接和断开一个button…我有一个在线用户列表,这是我的定义的事件,用户触发的帮助下完美pipe理。

但问题是我无法检测用户是否已经失去了他的连接或closures浏览器窗口,而不必手动断开自己(通过断开button)…

这个socket.io事件只有当用户断开自己而不是当他失去连接时才会触发。

socket.on('disconnect',function(){ console.log('user disconnected'); }); 

我想要一些非常好的机制来关注用户,以更新我的在线用户列表。

有什么区别? closures窗口,切断以太网线…服务器都是一样的:连接结束。

阅读socket.io文档: https : //github.com/LearnBoost/socket.io/wiki/Exposed-events

socket.on('disconnect',function(){}) – 当客户端 – 服务器连接closures时,断开连接事件被触发。 它触发想要的,不需要的,移动的,不可移动的,客户端和服务器断开连接。

你不应该依赖你的button,因为人们可以断开而不使用该button。 使用disconnect事件,一旦套接字断开(一个套接字,而不是一个用户,导致Node只知道套接字),你将不得不找出谁是该套接字的“所有者”,并将其标记为“断开连接”。 或者甚至更好,等待几秒钟,然后将他标记为离线。 为什么? 因为即使用户只是重新加载页面,或者导航到另一个页面,断开事件也会触发。 所以,如果您等待几秒钟,用户将再次联机。

我也遇到了这个问题,最后我创build了一个每隔X秒运行一次的“监视器”,并且当用户不拥有任何套接字或者当他们似乎不在时(长时间没有活动)时,将用户标记为离线。