如何检测用户的连接丢失或他关闭了Nodejs socket.io中的浏览器窗口
我在Node.js和Socket.io上有一个聊天应用程序,用户可以通过按钮进行连接和断开连接…我有一个在线用户列表,借助我定义的事件触发,可以很好地管理这些用户。
但是问题是我无法检测到用户是否在没有手动断开连接(通过断开连接按钮)的情况下断开了连接或关闭了浏览器窗口…
仅当用户断开连接时才触发该socket.io事件,而不会在断开连接时触发。
socket.on('disconnect',function(){ console.log('user disconnected'); });
我希望有一种非常好的机制来关注用户,以便更新我的在线用户列表。
回答:
有什么区别?关闭窗口,切断以太网线…对于服务器来说都是一样的:连接结束。
阅读socket.io文档:https : //github.com/LearnBoost/socket.io/wiki/Exposed-
events
socket.on(’disconnect’,function(){})-在所有情况下,当客户端-
服务器连接关闭时,都会触发断开事件。它会在需要,不需要,移动,不移动,客户端和服务器断开连接时触发。
您不应该依赖按钮,因为人们可以不使用该按钮而断开连接。使用断开事件,一旦套接字断开连接(套接字,而不是用户,导致Node仅了解套接字),您将必须找出谁是该套接字的“所有者”并将其标记为“已断开连接”。甚至更好,请等待几秒钟,然后将他标记为离线。为什么?因为即使用户只是重新加载页面或导航到另一个页面,断开事件也会触发。因此,如果您等待几秒钟,用户将再次联机。
我也遇到了这个问题,最终我创建了一个“观察程序”,该监视程序每X秒运行一次,并在用户没有任何套接字或它们似乎不活动时(很长时间没有活动)将用户标记为脱机。
以上是 如何检测用户的连接丢失或他关闭了Nodejs socket.io中的浏览器窗口 的全部内容, 来源链接: utcz.com/qa/410017.html