来自Websocket的RFC6455, 控制帧可能与分段帧交织。
我不理解它的必要性,因为它使发送和接收部分的设计更加复杂。
目前,控制框可以是“关闭”,“Ping”和“Pong”(其他一切都保留)。
如果控制帧是“关闭”,那么接收碎片的结束是没用的,所以不需要交错(碎片方可以发送“关闭”操作码并停止发送更多碎片,因为你是在“关闭”之后不应该发送任何东西。
如果控制框是“Ping”或“Pong”,则没有任何意义。分段端正在向客户端发送数据,那么为什么要求客户端ping它是否存活(它已经在发送系统调用中有这个信息)?或者立即回复ping,因为它实际上是在向客户端发送数据?
那么,为什么我们需要这种机制(交错控制帧)呢?
答案 0 :(得分:1)
检测半开连接:http://blog.stephencleary.com/2009/05/detection-of-half-open-dropped.html
另一方可能会向您发送数据,但无法获取您的数据。因此能够交错ping和pongs,可以检查至少另一端是否能理解你的消息并回复它们。
它并没有使它复杂得多。无论如何,当你找到一个控制框架时,你必须阅读分隔框架,采取行动并继续阅读更多的框架。
http://www.whatwg.org/specs/web-apps/current-work/multipage/network.html#ping-and-pong-frames
.3.4 Ping和Pong帧
WebSocket协议规范定义了Ping和Pong帧 可用于保持活力,心跳,网络状态探测, 延迟检测等。这些目前尚未公开 在API中。
用户代理可以根据需要发送ping和未经请求的pong帧 尝试维护本地网络NAT映射的示例 检测失败的连接,或向用户显示延迟指标。 用户代理不得使用ping或未经请求的pongs来帮助服务器; 假设服务器将在适当的时候请求拨打 服务器的需求。