1.首先安装websocktetd模块包
链接:https://pan.baidu.com/s/1Mt3O1E7nUrtfbPr0o9hhrA
提取码:fazs
2编辑init.py文件 该代码借鉴前人的基础上修改了一些
# coding: utf-8
import socket
import struct
import hashlib, base64
import threading
import time
connectionlist = {} # 存放链接客户fd,元组
g_code_length = 0
g_header_length = 0 # websocket数据头部长度
PRINT_FLAG = True
"""
经测试发现IE 11浏览器在成功建立websocket连接后,会间隔30s发送空信息给服务器以验证是否处于连接状态,
因此服务区需要对收到的数据进行解码并判断其中载荷内容是否为空,如为空,应不进行广播
"""
# 计算web端提交的数据长度并返回
def get_datalength(msg):
global g_code_length
global g_header_length
print('册数msg',msg)
if(msg):
g_code_length = msg[1] & 127
print('测试length',g_code_length)
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)
if(not msg):
g_header_length = 0
return g_code_length
# 解析web端提交的bytes信息,返回str信息(可以解析中文信息)
def parse_data(msg):
global g_code_length
g_code_length = msg[1] & 127
if g_code_length == 126:
g_code_length = struct.unpack('>H', msg[2:4])[0]
masks = msg[4:8]
data = msg[8:]
elif g_code_length == 127:
g_code_length = struct.unpack('>Q', msg[2:10])[0]
masks = msg[10:14]
data = msg[14:]
else:
masks = msg[2:6]
data = msg[6:]
en_bytes = b""
cn_bytes = []
for i, d in enumerate(data):
nv = chr(d ^ masks[i % 4])
nv_bytes = nv.encode()
nv_len = len(nv_bytes)
if nv_len == 1:
en_bytes += nv_bytes
else:
en_bytes += b'%s'
cn_bytes.append(ord(nv_bytes.decode()))
if len(cn_bytes) > 2:
cn_str = ""
clen = len(cn_bytes)
count = int(clen / 3)
for x in range(count):
i = x * 3
b = bytes([cn_bytes[i], cn_bytes[i + 1], cn_bytes[i + 2]])
cn_str += b.decode()
new = en_bytes.replace(b'%s%s%s', b'%s')
new = new.decode()
res = (new % tuple(list(cn_str)))
else:
res = en_bytes.decode()
return res
# 调用socket的send方法发送str信息给web端
def sendMessage(msg):
global connectionlist
send_msg = b"" # 使用by