我想让Websocket连接保持活动状态不确定的时间。理想情况下,套接字会经常发送数据,但这是不确定的,而且我也不想做出假设,因为用户可能处于空闲状态。
我有一个对象存储对所有websocket连接的引用。我每隔x分钟安排一次功能是否合适?秒?基本上遍历所有连接,ping它们然后丢弃那些没有收到过pong的连接?或者我是否需要启用一个自动保持连接活动的标志?
我在我的服务器上使用ws库,但在客户端本地创建了websocket连接。
答案 0 :(得分:2)
在客户端,您无法知道在从客户端计算机到网络路径的网络路径中出现了多少代理,防火墙,NAT,等。目标服务器。其中任何一个都可以有自己独立的空闲计时器。使用TCP keepalive 可能工作,但仅用于从客户端到下一跳的TCP会话 - 实际上可能是或可能不是终端服务器。
鉴于上述情况,我建议 是 ,应定期ping您连接的WebSocket会话。无论你是从服务器接收pong,还是从通过那个(可能是错综复杂的)网络中间盒链保持你的连接活着的角度来看,是无关紧要的;你只是想确保路径上的所有内容都能看到某些流量,以便重置其空闲计时器。
显然,您希望权衡对连接的WebSocket会话进行ping操作的频率以及产生的开销。例如,每1秒ping一次就会有点多。您可能需要进行一些微调,以便通过实验确定满足您需求的良好ping间隔。
希望这有帮助!