【发布时间】:2023-03-03 18:03:01
【问题描述】:
我知道,如果 socket.io 客户端库没有定期收到对其发送到服务器的 ping 数据包的响应(假设由于某种原因,连接已断开)。而且,还有用于控制这种重新连接行为的客户端选项。
但是,如果客户端不活动并停止发送 ping 消息(比如因为客户端进入睡眠状态),服务器端会发生什么?我在 socket.io 服务器端文档中找不到任何解释这种情况或允许对其进行配置的信息。服务器会关闭一个不活动的客户端 socket.io 连接(它没有从它接收 ping 消息的连接)吗?如果是这样,服务器将等待多长时间?该行为是否可配置?
【问题讨论】:
-
如果您在 socket.io 文档中找不到合适的内容,您可以为此行为编写自己的代码。
-
重新。服务器端,
socket.on('disconnect', ...)会在超时后处理任何客户端无响应吗?disconnect捕获离开页面的客户,您可以使用io.engine.clientsCount显示剩余的客户。 -
@Data - 仅当客户端以有序的方式关闭并关闭其套接字时才会发生断开连接,而不是仅在它们失去连接时才会发生。当客户端刚刚失去连接时,此时不会向服务器发送任何内容。服务器必须以某种方式意识到,嗯,我已经很久没有收到这个客户端的任何消息了——我想知道他们现在是否已经消失了。 socket.io 协议的 ping/pong 部分是为了帮助检测这种情况。
-
这个有帮助吗:“非活动,io 会自动关闭一个套接字”,stackoverflow.com/a/9708962/1837472
标签: javascript node.js socket.io