【发布时间】:2015-04-04 19:04:55
【问题描述】:
我们在使用节点ws websockets library 的项目中遇到问题。 当客户端失去网络连接时,知道客户端已断开连接的唯一方法是从服务器发送 ws.ping()。这对我们来说太消耗资源了。
有人知道是否有一种默认方法可以让 ws 服务器使用 TCP 级别的 keepalives 而不是使用 ping/pong 功能?
【问题讨论】:
-
如果你在 webSocket 之上使用 socket.io,客户端会定期 ping 服务端。客户端使用它来了解连接何时终止,以便可以重新连接。但是,如果服务器知道任何“活动”客户端将每隔 X 时间间隔发送一个 ping,那么服务器可以利用它在该 X 时间间隔内没有收到这样一个 ping 的事实来自行拆除死连接。或者,如果您控制客户端,即使没有 socket.io,您也可以配置自己的 ping 间隔。
-
感谢 jfriend00 的评论。我已经实现了 ping/pong 功能,但正在寻找一种不涉及应用程序层而只使用网络层的解决方案。在这里找到了一个答案,为什么 TCP 保持活动对 websockets 不是一个好主意:stackoverflow.com/questions/23238319/… socket.io 库对我们不可用,因为在 v1.0 之后,该库似乎不支持集群模块。这让我选择了 ws websockets。