Javascript 套接字IO检测客户端何时失去连接
我需要能够检测到用户何时失去了与套接字的连接,在我刚刚关闭笔记本电脑时,似乎没有调用Javascript 套接字IO检测客户端何时失去连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我需要能够检测到用户何时失去了与套接字的连接,在我刚刚关闭笔记本电脑时,似乎没有调用socket.on(“断开”),因此它不会运行需要运行的ajax调用来更新数据库以将用户标记为脱机。我怎样才能检查连接是否已关闭或其他情况?我们也遇到了这种情况,如上所述,我们使用自己的心跳计时器 例如,服务器将每5秒发出一次心跳(我们只需发送服务器时间)。客户端有11秒的超时时间,因此有2次机会捕获心跳。如果它收到心跳信号,我们将重置计时器。如果我们错过了两个心跳,超时功能将运行,您可以在那里做任何您想做的事情
socket.on(“断开”)
,因此它不会运行需要运行的ajax调用来更新数据库以将用户标记为脱机。我怎样才能检查连接是否已关闭或其他情况?我们也遇到了这种情况,如上所述,我们使用自己的心跳计时器
例如,服务器将每5秒发出一次心跳(我们只需发送服务器时间)。客户端有11秒的超时时间,因此有2次机会捕获心跳。如果它收到心跳信号,我们将重置计时器。如果我们错过了两个心跳,超时功能将运行,您可以在那里做任何您想做的事情
非常简单。正如这里提到的,Socket.IO有自己的心跳实现。
但默认情况下,断开连接的间隔为25秒,阈值为60秒
所以我的建议是:在测试中设置默认值。否则,您可能会错过阈值
例如:
socket.set("heartbeat timeout", 10);
socket.set("heartbeat interval", 5);
我建议使用一个监听器或“心跳”来检查客户端是否有来自服务器的响应。这就是我所做的。我在我的网站的前一个版本中这样做了,尽管在给定的时间有足够的用户,这似乎只是服务器上的一种过载,就请求的数量而言,这可能是最好的,而且只有选项。socket.io使用心跳,所以我确信这是可行的,当我发现它确实检测到断开连接时,它会触发服务器文件中的断开连接,但是它无法将断开连接发送到页面,在页面上它会得到指令,以启动ajax调用来更新数据库,无论出于什么原因,因此,我需要找到一种从服务器文件更新数据库的方法,我不确定如何更新。您可以执行回调或自定义eventemitter+订阅服务器。这应该是可以接受的答案。它第一次起作用。。。在我的例子中,超时和间隔设置为毫秒,因此10000而不是10。。。非常感谢!