ZBLOG

websocket包格式

WebSocket 是一种全双工通信协议,主要用于在客户端和服务器之间进行实时数据传输。WebSocket 的数据包格式可以分为两个部分:头部负载(消息体)。下面是 WebSocket 数据包的基本结构:

1. WebSocket 帧格式

每个 WebSocket 消息都由一个或多个帧组成。每一帧的结构如下:

字段 大小 描述
FIN 1 bit 表示这是消息的最后一帧(1 = 是,0 = 否)
RSV1, RSV2, RSV3 1 bit each 保留位,通常用于扩展
Opcode 4 bits 指示当前帧的数据类型
Mask 1 bit 指示是否对负载进行掩码处理 (1 = 有, 0 = 没有)
Payload length Variable 有效载荷的长度,依赖于长度值的大小
Masking key 4 bytes 如果 Mask 为 1,则包含掩码键
Payload data Variable 实际发送的数据

2. 字段详细说明

  • FIN (1 bit):

    • 如果为 1,表示这是一个完整消息的最后一帧;如果为 0,则还有后续帧。
  • RSV (3 bits):

    • 保留字段,用于未来扩展,一般情况下可以设置为 000
  • Opcode (4 bits):

    • 指示消息类型。常用值包括:
      • 0x0: 连续文本帧
      • 0x1: 文本消息
      • 0x2: 二进制消息
      • 0x8: 连接关闭
      • 0x9: ping
      • 0xA: pong
  • Mask (1 bit):

    • 客户端到服务器的所有消息必须使用掩码,而从服务器到客户端的消息不能使用掩码。
  • Payload length (7 bits / 7+16 bits / 7+64 bits):

    • 根据实际长度可变:
      • 如果小于等于 125 字节,直接使用该字节作为有效载荷长度;
      • 如果为 126,则接下来的两个字节表示有效载荷长度(16 位);
      • 如果为127,则接下来的八个字节表示有效载荷长度(64 位)。
  • Masking key (4 bytes):

    • 当 Mask 为 1 时存在,是一个随机生成的四字节数组,用来掩码后面的 payload data。
  • Payload data:

    • 实际传输的数据,根据 Payload length 的大小决定数据部分的长度。

示例

以下是一个简单的文本消息 “Hello” 的 WebSocket 数据包示例:

  1. FIN: 1
  2. RSV: 000
  3. Opcode: 0001 (文本)
  4. Mask: 0
  5. Payload Length:5
  6. Mask Key: A3 B2 C5 D7
  7. Payload Data:
  8. Original Data: H e l l o
  9. Masked Data: M L K S J ... (根据掩码计算)

在构建和解析 WebSocket 消息时,需要遵循上述格式规则,以确保能够正确地与 WebSocket 服务进行交互。如果你需要更多具体信息或者更复杂的数据交换示例,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22366

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?