Websocket - 客户端是否应该发送 ping 帧



正如标题所暗示的那样,Ping 帧应该只从服务器发送,还是最好让两个端点都发送它们?正如Websocket RFC中提到的:

注意:Ping 帧可以用作保持连接...

因此,通过让一个端点发送 ping 请求,它应该保持连接打开,对吧?

上面一行的第二部分是这样的:

或作为验证远程终结点是否仍具有响应性的方法。

我对 websockets 的概念很陌生,但如果从服务器关闭连接,不会通知客户端吗?

考虑一下服务器刚刚消失的情况,也许它崩溃了。谁或什么会通知客户?或者说靠近服务器的网络链接关闭了很长时间,以至于当它恢复时,服务器已经完全忘记了这个客户端。谁或什么会告诉客户?

有三种可能性:

  1. 客户端不需要检测连接丢失。在这种情况下,您无需执行任何特殊操作。

  2. 客户端已经有某种方法来检测连接的丢失。例如,如果连接空闲一段时间,则客户端可以发送应用程序级查询,并在没有响应或查询失败时超时。

  3. 客户端需要检测连接丢失,但没有现有的方法来执行此操作。在这种情况下,使用 ping 是有意义的。

在典型的查询/响应协议中,客户端通常不需要 ping 服务器,因为它可以发送一些具有相同效果的查询。除非 websocket 上层的协议支持服务器查询客户端的某种方式,否则服务器通常只有两个选择:使用 ping 来检测丢失的连接或断开空闲客户端的连接。

两种变体都有实现方式。例如,如果服务器向客户端发送ping,则客户端可以获取服务器断开连接的信息,该循环带有截止时间计时器,每次收到ping时都会重置。如果计时器达到 dealine,则意味着服务器已断开连接。

相关内容

  • 没有找到相关文章

最新更新