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,分別用來說明接收的信息中頭部長度和實際載荷長度