我正在尝试实现一个协议,将接收到的Pong与相应的Ping进行匹配。
但是,对于我发送但没有收到乒乓球的乒乓球,我该怎么办?这会发生吗?还是保证所有ping都会有相应的Pong,并且从未接收到Pong表示连接丢失?websocket协议文档对此保持沉默。
一致的WebSocket实现必须在收到ping时返回pong。一般来说,在一段合理的时间后没有乒乓球意味着网络错误或远程端点上有其他事情繁忙或中断。这里有一些注意事项。
- 必须只确认最近的ping。如果你发送两个ping,你可能只会得到一个pong
- 乒乓球是控制帧。WebSocket没有用于控制帧的单独通道。大的数据帧可能会延迟接收紧接在它之后的ping。实现可能会对数据消息进行分段,以提高控制消息延迟
- 在收到近帧后,将不会发送pongs
Websockets基于TCP协议,该协议确保所有数据包都按顺序处理,并且在继续处理不匹配的数据之前重新传输丢失或损坏的数据包。
因此,对缺少pong的唯一可能解释是在连接的另一侧实现ping/pong协议时出错。
在浏览网页时,可以很容易地看到TCP协议的可靠性及其排序。当你的互联网连接不好时,网站加载可能会在进行中中断,但加载的部分总是按正确的顺序进行,没有任何错误EThgf%$/GHfDw(&IjfdsAyW$§REggnfdER§$HHxM+FD5