ZBLOG

websocket的响应格式

WebSocket的响应格式主要涉及到连接建立时的HTTP握手和随后数据帧的格式。以下是相关细节:

1. WebSocket 握手过程

在WebSocket建立连接时,客户端通过HTTP请求发起握手,服务器需返回相应的HTTP响应。

客户端请求示例:

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务器响应示例:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: dGhlIHNhbXBsZSBub25jZQ==
  • Status Code: 101 Switching Protocols 表示协议切换。
  • Sec-WebSocket-Accept 是根据客户端发送的 Sec-WebSocket-Key 经过特定处理(SHA-1 加密和 Base64 编码)后生成的值,用于验证连接。

2. WebSocket 数据帧格式

一旦连接建立成功,数据将以数据帧的形式在客户端和服务器之间传输。每个数据帧包含几个关键字段:

帧结构:

  • FIN (1 bit): 表示这是最后一个帧(1为是,0为否)。
  • RSV1, RSV2, RSV3 (各 1 bit): 保留位,用于扩展控制。一般情况下这些位都设置为0。
  • Opcode (4 bits): 指明帧类型,例如文本消息、二进制消息、Ping、Pong等。
  • Mask (1 bit): 如果设置为1,则表示该帧的数据部分是被掩码过的(仅对客户端到服务器的数据适用)。
  • Payload length (7 bits or 7+16 or 7+64 bits): 有效负载长度,可变。如果长度小于125,使用7 bits表示;如果在126到65535之间,则使用16 bits表示;如果大于65535,则使用64 bits表示。
  • Masking Key (4 bytes): 当 Mask 为真时,这里会包含4字节的掩码键,用于对有效负载进行解码。
  • Payload Data: 实际的数据内容,根据有效负载长度决定其大小。

示例数据帧:

假设我们发送一个简单文本消息”Hello”:

| FIN | RSV | Opcode | Mask | Payload length | Masking Key | Payload Data |
|-----|-----|--------|------|-----------------|--------------|---------------|
|  1  | 000 |   0x1  |   0   |        N/A       |     N/A      |    Hello      |

常见 Opcode 值:

  • 0x0: continuation frame(续传帧)
  • 0x1: text frame(文本帧)
  • 0x2: binary frame(二进制帧)
  • 0x8: connection close frame(关闭连接帧)
  • 0x9: ping frame(Ping 帧)
  • 0xA: pong frame(Pong 帧)

通过这种方式,WebSocket能够实现高效且灵活的双向通信。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?