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

新手上路,请多包涵

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

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

原文由 jfriend00 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
1 个回答

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

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

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

因此,您可以通过在 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);

原文由 Pi Da 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题