websocket 数据格式
时间: 2023-06-20 09:08:52 浏览: 164
利用WebSocket完成数据通讯
WebSocket 是一种协议,它使用 TCP 作为传输层协议,使得 Web 应用程序能够实现双向通信。WebSocket 的数据格式是基于帧的,每个帧都有一个特定的格式,用于表示不同类型的消息。以下是 WebSocket 数据帧的格式:
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
```
下面是各个字段的详细说明:
- FIN:1 位,表示此帧是否为消息的最后一帧。如果是最后一帧,则为 1;否则为 0。
- RSV1、RSV2、RSV3:3 位,暂时保留,目前默认为 0。
- Opcode:4 位,表示此帧的类型,如下所示:
- 0x0 表示连续帧
- 0x1 表示文本帧
- 0x2 表示二进制帧
- 0x8 表示连接关闭帧
- 0x9 表示 Ping 帧
- 0xA 表示 Pong 帧
- MASK:1 位,表示 Payload 数据是否经过掩码处理。如果是,则为 1;否则为 0。
- Payload len:7 位,表示 Payload 数据的长度。如果 Payload 数据的长度小于等于 125 字节,则该字段的值就是 Payload 数据的长度。如果 Payload 数据的长度在 126 字节和 65535 字节之间,则该字段的值为 126,并且后面接着 2 个字节表示 Payload 数据的真实长度。如果 Payload 数据的长度大于 65535 字节,则该字段的值为 127,并且后面接着 8 个字节表示 Payload 数据的真实长度。
- Extended payload length:如果 Payload len 字段的值为 126 或 127,则使用 Extended payload length 表示 Payload 数据的真实长度。如果 Payload len 字段的值为 126,则 Extended payload length 占用 2 个字节;如果 Payload len 字段的值为 127,则 Extended payload length 占用 8 个字节。
- Masking-key:如果 MASK 字段的值为 1,则表示 Payload 数据经过掩码处理,需要使用 Masking-key 对 Payload 数据进行解码。Masking-key 占用 4 个字节。
- Payload Data:表示数据内容。
总体来说,WebSocket 数据帧的格式比较复杂,但是由于它是底层协议,对于开发人员来说,只需要使用 WebSocket API 提供的接口,就可以方便地进行双向通信了。
阅读全文