为什么Websocket RFC允许控制帧与多帧交错

时间:2014-04-15 10:21:11

标签: websocket rfc

来自Websocket的RFC6455, 控制帧可能与分段帧交织。

我不理解它的必要性,因为它使发送和接收部分的设计更加复杂。

目前,控制框可以是“关闭”,“Ping”和“Pong”(其他一切都保留)。

如果控制帧是“关闭”,那么接收碎片的结束是没用的,所以不需要交错(碎片方可以发送“关闭”操作码并停止发送更多碎片,因为你是在“关闭”之后不应该发送任何东西。

如果控制框是“Ping”或“Pong”,则没有任何意义。分段端正在向客户端发送数据,那么为什么要求客户端ping它是否存活(它已经在发送系统调用中有这个信息)?或者立即回复ping,因为它实际上是在向客户端发送数据?

那么,为什么我们需要这种机制(交错控制帧)呢?

1 个答案:

答案 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来帮助服务器;   假设服务器将在适当的时候请求拨打   服务器的需求。