1

我正在尝试实现一个协议,以将收到的 Pong 与相应的 Ping 进行匹配。

但是对于我发送但没有收到 Pong 的 Ping,我该怎么办?这会发生吗?还是保证所有 ping 都会有相应的 Pong,并且从未收到 Pong 表示连接丢失?websocket 协议文档对此保持沉默。

4

2 回答 2

2

符合要求的 WebSocket 实现必须在收到 ping 时返回一个 pong。通常,在合理的时间后没有 pong 意味着网络错误或远程端点上的其他东西正忙或损坏。有一些注意事项。

  • 只有最近的 ping 必须被确认。如果您发送两个 ping,您可能只会收到一个 pong。
  • ping 和 pong 是控制帧。WebSocket 没有单独的控制帧通道。大数据帧可能会延迟接收紧随其后的 ping。实现可以分段数据消息以改善控制消息延迟。
  • 收到关闭帧后不会发送 pongs。
于 2013-02-04T20:58:59.457 回答
2

Websockets 基于 TCP 协议,可确保按顺序处理所有数据包,并在继续处理传入数据之前重新传输丢失或损坏的数据包。

因此,丢失 pong 的唯一可能解释是在连接的另一端执行 ping/pong 协议时出现错误。

在浏览网页时可以很容易地看到 TCP 协议的可靠性及其排序。当您的互联网连接不佳时,网站加载可能会在进行过程中中断,但那些加载的部分始终处于正确的顺序并且没有任何 errohETHgf%$/GHfDw(&IjfdsAyW$§REggnfdER§$HHxM+FD5

于 2013-02-04T15:56:36.740 回答