websocket 协议之控制帧 (RFC6455 5.5节)翻译

源英文连接   https://tools.ietf.org/html/rfc6455#section-5.5

5.5   WebSocket 控制帧

WebSocket 控制帧的状态码  用  0x8 – 0xF  表示,特征是 1. (注:8进制)的操作码

目前已经定义的操作码包括0x8(关闭信号),0x9(Ping信号),0xA(Pong信号),操作码 0xB-0xF  尚未定义,备用。

控制帧适用于控制WebSocket的通信状态。全部的控制帧都必须在一个最长长度为125字节的载荷(注:网络通信中的信息段,包的组成部分)中,并且同一个数据包之中,只能有一段控制帧载荷,不能分割成几段。

5.5.1 关闭信号(Close信号)

关闭信号的状态码 是0x8.

关闭信号可能包含有一个信息体(body),说明关闭的原因,比如终端关机,信息帧过大,信息帧格式不对。如果有信息体体(body),那么这个信息体的前两位必须是在 Section 7.4 中定义的状态码,紧接两个字节还是整数。

解释的内容必须是UTF-8编码的数据,该解释内容本规范并不定义,该数据亦未必可读,但是最好对调试有帮助,或者和开启连接有关。既然数据未必对人可读,所以最好不要给用户看。从客户端发送到服务器的关闭信号则必须被屏蔽( Close frames sent from client to server must be masked as per Section 5.3)。

应用程序发送了关闭信号之后,必须不能再发送任何信息。

如果服务端或者客户端收到了一个关闭信号,但是之前还没有发送过关闭信号,作为回应,该端(服务端/客户端)必须发送一个关闭帧信号作为回应。发送回应关闭信号的事后,必须将它收到的状态码也一并返回。在收到关闭信号之后,应尽快回应,虽然也许会等待当前正在发送的信息发送完毕之后再发送,但是不保证这些继续发送的信息会被对方接受并响应(注:就是这些信息,再发也没用了,对方close了)。

在双端都各自收发了一个关闭信号之后,终端会认为websocket已经关闭,底层的tcp连接必须立即断开。

如果客户端和服务器同时发送了一个关闭信号,两个终端都会发送和接受了一个关闭信号,我们认为websocke协议已经关闭了,并且底层的TCP连接也要断开。

Close信号会在浏览器刷新之前以及主动断开连接的时候,发出

5.5.2 Ping 信号

Ping信号帧包含状态码0x9。

Ping信号帧应该包含“应用数据(Application data)”,收到Ping信号之后,该终端必须发送一个Pong信号作为回应,除非该终端已经发送了一个关闭信号。该终端应该尽快的发送一个Pong信号,关于Pong信号,会在  Section 5.5.3 中讨论(注:也就是下面)。
无论是服务端,还是客户端,在连接建立之后,关闭之前,都可能随时发送一个Ping信号,用来确认连接依旧畅通。

5.5.3 Pong信号

Pong信号帧必须包含状态码0xA。

Pong信号帧必须包含Ping信号中的“应用数据”(Application data)作为回应。

如果终端收到了一个Ping信号,却尚未来得及回应之前的Ping信号,该终端选择回应据现在最近的Ping。

Pong信号是被动信号,不能主动发送。

Leave a comment

Your email address will not be published.

*