WebSocket 传输内容支持文本或二进制数据,这些数据的边界靠帧(frame)来维护,其中帧的第二个字节低7位用来表示信息内容的长度(payload len)。
数据长度一共有三种情况,全都由低7位的值认定,如果取值在126以内,不包括126,则数据真实长度就是低7位的值。如果取值为126,则需要额外的两个字节来表示数据的真实长度,16位的无符号整数。如果取值127,那么需要额外的8个字节表示数据的真实长度,64位的无符号整数。
# 计算web端提交的数据长度并返回
def get_datalength(msg):
global g_code_length
global g_header_length
g_code_length = msg[1] & 127
if g_code_length == 126:
g_code_length = struct.unpack('>H', msg[2:4])[0]
g_header_length = 8
elif g_code_length == 127:
g_code_length = struct.unpack('>Q', msg[2:10])[0]
g_header_length = 14
else:
g_header_length = 6
g_code_length = int(g_code_length)
return g_code_length
说明
- 此函数参数为通过sock.recv接受到的bytes流
- 此函数引用了两个全局变量g_code_length、g_header_length,分别用来说明接收的信息中头部长度和实际载荷长度