Я пытаюсь реализовать новый протокол hybi-10 на сервере python, и на данный момент мне удалось получить рукопожатие и получить данные от клиента (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 я получаю: '\x81\x04T0s='
, который отправляется в JavaScript.У меня нет ни ответа, ни ошибок.
Я пытался отправить другие данные, например 'OKKK'
.После функции encode_hybi я получаю: '\x81\x08T0tLSw=='
.Не знаю, помогает ли это, но при отправке этих данных JavaScript выдает ошибку:
Нераспознанный код операции с кадром: 13.
Эта ошибка появляется каждый раз, когдадлина отправляемых данных превышает 3 символа.
Я действительно не могу понять проблему.Что-то не так в кодировке?