Проблема с отправкой данных на сервер Hybi-10 WebSockets - PullRequest
4 голосов
/ 28 сентября 2011

Я пытаюсь реализовать новый протокол 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 символа.

Я действительно не могу понять проблему.Что-то не так в кодировке?

1 Ответ

4 голосов
/ 28 сентября 2011

Вы использовали \n\r\n\r\n в конце формата рукопожатия, но оно должно быть \r\n\r\n.В настоящее время \n является частью ключа.

Хотя я не понимаю, как вы все еще смогли открыть соединение, похоже, что удаление первого \n решает проблему.

...