Я пытаюсь сделать подключение к веб-соке между клиентом javascript и сервером python. Мне удалось получить право на связь, и я могу отправлять данные с javascript-клиента и декодировать его на сервере.Python encode web socket frames
Проблема возникает, когда я хочу отправить данные с сервера. Когда я пытаюсь отправить чистый текст ascii, я получаю эту ошибку на клиенте Websocket Error: [object Event]
. Естественно, поэтому я хочу «закодировать» данные перед отправкой. Я пробовал много вещей, включая базовый base64. Но ничего не работает. Я наткнулся на это thread. Где это пример того, как подготовить данные для отправки.
Вот код, я придумал до сих пор:
def encodeFrame(bytesRaw):
bytesFormatted = []
bytesFormatted.append(129)
indexStartRawData = 0
if len(bytesRaw) <= 125:
bytesFormatted.append(len(bytesRaw))
indexStartRawData = 2
elif len(bytesRaw) >= 126 and len(bytesRaw) <= 65535:
bytesFormatted.append(126)
bytesFormatted.append((len(bytesRaw) >> 8) + 255)
bytesFormatted.append((len(bytesRaw)) + 255)
indexStartRawData = 4
else:
bytesFormatted.append(127)
bytesFormatted.append((len(bytesRaw) >> 56) + 255)
bytesFormatted.append((len(bytesRaw) >> 48) + 255)
bytesFormatted.append((len(bytesRaw) >> 40) + 255)
bytesFormatted.append((len(bytesRaw) >> 32) + 255)
bytesFormatted.append((len(bytesRaw) >> 24) + 255)
bytesFormatted.append((len(bytesRaw) >> 16) + 255)
bytesFormatted.append((len(bytesRaw) >> 8) + 255)
bytesFormatted.append((len(bytesRaw)) + 255)
indexStartRawData = 10
bytesFormatted.put(bytesRaw, indexStartRawData)
return bytesFormatted
Я думаю, что большинство из них работает правильно, но я понятия не имею, что я должен делать с последней командой: bytesFormatted.put(bytesRaw, indexStartRawData)
. Я попытался просто добавить к массиву и использовать буферный формат. Но это не сработает. Функция, которая отправляет данные client.send(encodeFrame("test"))
в моем случае, принимает только буфер или строку.
Кто-нибудь знает, как это сделать «кодирование»?
Спасибо, работает отлично! – jakobS