正如标题所暗示的那样,Ping 帧应该只从服务器发送,还是最好让两个端点都发送它们?正如Websocket RFC中提到的:
注意:Ping 帧可以用作保持连接...
因此,通过让一个端点发送 ping 请求,它应该保持连接打开,对吧?
上面一行的第二部分是这样的:
或作为验证远程终结点是否仍具有响应性的方法。
我对 websockets 的概念很陌生,但如果从服务器关闭连接,不会通知客户端吗?
考虑一下服务器刚刚消失的情况,也许它崩溃了。谁或什么会通知客户?或者说靠近服务器的网络链接关闭了很长时间,以至于当它恢复时,服务器已经完全忘记了这个客户端。谁或什么会告诉客户?
有三种可能性:
-
客户端不需要检测连接丢失。在这种情况下,您无需执行任何特殊操作。
-
客户端已经有某种方法来检测连接的丢失。例如,如果连接空闲一段时间,则客户端可以发送应用程序级查询,并在没有响应或查询失败时超时。
-
客户端需要检测连接丢失,但没有现有的方法来执行此操作。在这种情况下,使用 ping 是有意义的。
在典型的查询/响应协议中,客户端通常不需要 ping 服务器,因为它可以发送一些具有相同效果的查询。除非 websocket 上层的协议支持服务器查询客户端的某种方式,否则服务器通常只有两个选择:使用 ping 来检测丢失的连接或断开空闲客户端的连接。
两种变体都有实现方式。例如,如果服务器向客户端发送ping,则客户端可以获取服务器断开连接的信息,该循环带有截止时间计时器,每次收到ping时都会重置。如果计时器达到 dealine,则意味着服务器已断开连接。