【问题标题】:Websockets: what to do about lost Pings?Websockets:如何处理丢失的 Ping?
【发布时间】:2013-01-19 07:07:21
【问题描述】:

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

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

【问题讨论】:

    标签: web-applications web websocket ping latency


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多