Javascript 非活动客户端连接的socket.io服务器端超时?

Javascript 非活动客户端连接的socket.io服务器端超时?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我知道,如果socket.io客户端库没有定期接收到对发送到服务器的ping数据包的响应(假设连接因某种原因而中断),它将关闭当前socket.io连接(然后尝试重新连接)。此外,还有用于控制此重新连接行为的客户端选项 但是,如果客户端处于非活动状态并停止发送ping消息(例如,因为客户端进入睡眠状态),服务器端会发生什么情况?我在socket.io服务器端文档中找不到任何解释这种情况或允许对其进行配置的信息。服务器是否会关闭一个非活动的client socket.io连接(它没有从中接收pin

我知道,如果socket.io客户端库没有定期接收到对发送到服务器的ping数据包的响应(假设连接因某种原因而中断),它将关闭当前socket.io连接(然后尝试重新连接)。此外,还有用于控制此重新连接行为的客户端选项

但是,如果客户端处于非活动状态并停止发送ping消息(例如,因为客户端进入睡眠状态),服务器端会发生什么情况?我在socket.io服务器端文档中找不到任何解释这种情况或允许对其进行配置的信息。服务器是否会关闭一个非活动的client socket.io连接(它没有从中接收ping消息)?如果是,服务器将等待多长时间?该行为是否可配置

PoTimeOUT(号码):有多少MS没有一个包考虑连接关闭(60000)< /P> pingInterval(Number):发送新ping数据包前的毫秒数(25000)


根据socket.io 2.20自述文件(最新版本自2020年1月起):

“在Engine.IO级别实现了心跳机制,允许服务器和客户端都知道另一方何时不再响应

该功能是通过在服务器和客户端上设置定时器来实现的,在连接握手过程中共享超时值(
pingInterval
pingTimeout
参数)。”

因此,您可以通过在socket.io中的engine.io组件上设置以下超时属性来配置服务器端和客户端超时设置

使用socket.io版本2.20:

const io = ...; // initialize socket.io how you wish
io.eio.pingTimeout = 120000; // 2 minutes
io.eio.pingInterval = 5000;  // 5 seconds
使用旧版本的socket.io也有同样的问题:

const io = ...; // initialize socket.io how you wish
io.set('heartbeat timeout', 1200000);
io.set('heartbeat interval', 5000);

在socket.io 2.20上。这可以在初始化socket.io时设置

const io = require("socket.io")({pingTimeout: 10000, pingInterval: 30000});

查看所有选项及其默认值

如果在socket.io docs.re中找不到合适的内容,您可以为该行为编写自己的代码。服务器端,
socket.on('disconnect',…)
会在超时后处理任何客户端无响应吗
disconnect
捕获离开页面的客户端,您可以使用
io.engine.ClientScont
显示剩余的客户端。@数据-只有当客户端以有序方式关闭并关闭其套接字时,断开连接才会发生,而不是当客户端刚刚失去连接时。当客户端刚刚失去连接时,此时不会向服务器发送任何内容。服务器必须以某种方式意识到,嗯,我很久没有听到这个客户机的任何消息了——我想知道他们现在是否消失了。socket.io协议中的ping/pong部分有助于检测这种情况。这是否有帮助:“非活动,io将自动关闭套接字”,这不是客户端设置吗?我不这么认为。查看应答中的链接我在您链接的服务器api页面上看不到这些设置。问题是客户端发送ping,服务器用pong响应。因此,这两种设置都控制客户端的行为,即is发送ping的频率以及等待pong响应的时间。在我看来,它们并不真正适用于服务器。我想知道服务器在一段时间内没有ping时做什么。服务器不按间隔发送ping。它只是侦听ping并发送一个pong作为响应。当客户端连接时,服务器所做的第一件事是发送一个open事件
socket received:type'open',data'{“sid”:“zc8mQaGAEYuC_FTKAAA8”,“upgrades”:[“websocket”],“pingInterval”:25000,“pingTimeout”:60000}'
,并带有所需的间隔和超时。然后,客户在打乒乓球时遵守这些规则。