Python 3.5.2实现websocket服务端(一):get_datalength函数实现

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  

说明

  1. 此函数参数为通过sock.recv接受到的bytes流
  2. 此函数引用了两个全局变量g_code_length、g_header_length,分别用来说明接收的信息中头部长度和实际载荷长度

你可能感兴趣的:(Python 3.5.2实现websocket服务端(一):get_datalength函数实现)