我正在尝试在python服务器中实现新的hybi-10协议,现在我成功地进行了握手并从客户端(JavaScript)接收数据,但现在我遇到了将数据发送到客户端的问题。
我正在使用websockify(encode_hybi
函数)中的一些代码来根据此协议对帧进行编码。但不幸的是,客户端似乎没有收到数据,因为on message事件永远不会触发。
所以我的代码是:
def encode_hybi(self, buf, opcode = 0x01):
buf = b64encode(buf)
b1 = 0x80 | (opcode & 0x0f)
payload_len = len(buf)
if payload_len <= 125:
header = struct.pack('>BB', b1, payload_len)
elif payload_len > 125 and payload_len < 65536:
header = struct.pack('>BBH', b1, 126, payload_len)
elif payload_len >= 65536:
header = struct.pack('>BBQ', b1, 127, payload_len)
print repr(header + buf)
return header + buf
def send(self, data):
logging.info("Message Sent: %s" % data)
if (self.protocol == 'hixie-76'):
self.client.send("\x00%s\xff" % data)
elif (self.protocol =='hybi-10'):
msg = self.encode_hybi(data)
self.client.send(msg)
我正在通过套接字发送一个简单的'OK'
。所以在encode_hybi函数之后,我得到:
发送到JavaScript的'\x81\x04T0s='
。我没有回应,也没有错误。
我尝试发送其他数据,例如'OKKK'
。在encode_hybi函数之后,我得到:'\x81\x08T0tLSw=='
。不知道它是否有帮助,但发送此数据后,JavaScript会出现错误:
无法识别的帧操作码:13。
每次发送的数据长度超过3个字符时都会出现此错误。
我真的无法理解这个问题。编码有问题吗?答案 0 :(得分:3)
您在握手格式结束时使用了\n\r\n\r\n
,但它应该是\r\n\r\n
。目前,\n
是密钥的一部分。
虽然我不明白你仍然能够打开连接,但看起来删除第一个\n
解决了这个问题。