You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket首字节Opcode始终返回0x8,该行为是否正常?

WebSocket Opcode 总是返回8的问题解析

你提取Opcode的方式错误,这才导致每次得到的结果都是8。

根据WebSocket协议规范,帧首字节的结构为:

  • 第1位:FIN(标识该帧是否为完整帧)
  • 第2-4位:RSV1、RSV2、RSV3(保留位,通常取值为0)
  • 第5-8位:Opcode(共4位,用于标识帧类型)

你用右移4位的方式提取Opcode,会错误地将最高位的FIN位包含进来。比如首字节0x81(二进制10000001),右移4位后得到1000(十进制8),但这个值里的最高位是FIN位的1,并非Opcode的一部分。

正确提取Opcode的方式是按位与0x0F,这样只会保留首字节的最后4位:
0x81 & 0x0F = 0x01(十进制1),这正是你期望的文本帧Opcode。

你提到关闭连接时的首字节0x88(二进制10001000),按位与0x0F后得到0x08(十进制8),这确实是关闭帧的Opcode,属于正常行为。

另外你期望的首字节0x17(二进制00010111)是错误的:FIN位为0表示这是分片帧的一部分,Opcode为7属于协议保留值,并非正常的文本帧格式。

修正后的Python代码:

data = bytearray(b'\x81\x8c\xf9t&\x90\x91\x1bJ\xf1\xd9\x07C\xe2\x8f\x11T\xb1')
opcode = data[0] & 0x0F
print(opcode)  # 输出1
assert 1 == opcode

内容的提问来源于stack exchange,提问作者7436284734

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:13:18