我有一个关于Node.js和Socket的聊天应用程序。用户可以通过一个按钮连接和断开…我有一个在线用户的列表,这是完美的管理与我定义的事件,用户触发的帮助。
但问题是我无法检测用户是否已失去连接或关闭浏览器窗口而不手动断开连接(通过断开连接按钮)…
这个套接字。IO事件只在用户断开连接时触发,而不是在用户失去连接时触发。
socket.on('disconnect',function(){
console.log('user disconnected'); });
我想要一些非常好的机制来关注用户,以便更新我的在线用户列表
有什么区别呢?关上窗户,切断以太网电线……对于服务器端也是一样的:end of connection。
读取套接字。io docs: https://github.com/LearnBoost/socket.io/wiki/Exposed-events
插座。On ('disconnect', function(){}) -当客户端-服务器连接关闭时,断开连接事件在所有情况下都被触发。它在需要的,不需要的,移动的,非移动的,客户端和服务器断开时触发。
你不应该依赖你的按钮,因为人们可以不使用按钮断开连接。使用disconnect事件,一旦一个套接字断开连接(一个套接字,而不是一个用户,因为Node只知道套接字),你将不得不找出谁是这个套接字的"所有者",并将他标记为"断开连接"。或者更好的是,等几秒钟,然后将他标记为离线。为什么?因为即使用户只是重新加载页面或导航到另一个页面,也会触发断开连接事件。因此,如果您等待几秒钟,用户将再次在线。
我也有这个问题,我最终创建了一个"观察者",每X秒运行一次,当用户没有任何套接字或当他们似乎离开(很长一段时间没有活动)时,将用户标记为脱机