2016-04-21 84 views
2

我想保持Websocket连接活动一段时间不确定。理想情况下,套接字将每隔一段时间发送一次数据,但这并不确定,而且我也不想做出假设,因为用户可能处于空闲状态。我需要'ping'连接的websocket连接吗?

我有一个存储对所有websocket连接的引用的对象。我每隔几分钟安排一次功能是否合适?秒?基本上遍历所有的连接,ping他们,然后丢弃那些没有收到歌曲?或者我是否需要启用一个自动保持连接活动的标志?

我在我的服务器上使用了ws库,但在客户端本地创建了websocket连接。

+1

我反对这个。如果一些在连接中间负责某个路由器或其他设备的netadmin已经认定通过它的连接足够宝贵,那么你真的没有企图欺骗他/不这样做。在任何情况下,您都无法阻止它发生:您仍然必须处理丢失的连接;那么好处在哪里?值得注意的是,大约是地球上最常用的应用协议的HTTP并不这样做。 – EJP

+0

那么你会如何排除陈旧的连接?在这种情况下,陈旧意味着他们没有发出关闭事件,但不再可用。 –

+0

socket.io(使用webSocket连接)将常规ping添加到检测旧的连接,并帮助防止网络基础结构超时不活动的连接。这是非常可行的(webSocket协议甚至定义了乒乓球数据包),或者你可以在客户端和服务器上使用socket.io,它会为你做。 – jfriend00

回答

1

从客户端到目标服务器的网络路径中,没有什么好方法可以让客户端知道有多少代理,防火墙,NAT,。其中任何一个都可以有自己独立的空闲计时器。使用TCP keepalive 可能会工作,但只有从您的客户端到下一跳的TCP会话 - 可能实际上也可能不是终端服务器。

鉴于上述情况,我会定期推荐,你应该您连接的WebSocket会话。无论你从服务器接收到乒乓球,从保持你的连接在网络中间盒链(可能错综复杂)的连贯性角度看,都是不相关的;您只需确保路径上的所有内容都能看到部分流量正在流动以重置其空闲计时器。

显然你想平衡多久你连接你的连接WebSocket会话与多少开销发生;例如,每1秒执行一次ping就会有点多。您可能需要进行一些微调以确定实验性的ping间隔是否符合您的需求。

希望这会有所帮助!