Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 套接字IO检测客户端何时失去连接_Javascript_Node.js_Socket.io - Fatal编程技术网

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。。。非常感谢!