Я пишу сервер websocket в python, и я столкнулся с проблемой при отправке сообщений обратно клиенту. Использование консоли JavaScript Chrome, я могу получить как найти это сообщение об ошибке:Сжатый бит должен быть 0 при отправке сообщения клиенту websocket
Сжатый бит должен быть равен 0, если нет переговоров выкачивает рамки расширения
Но дальше, чем я не могу найти документация о том, что это на самом деле означает. Вы можете найти начало этой проблемы (и код) here. Я немного растерялся. Я попытался сыграть с первым байтом, изменив его на все 0, но согласно this, второй бит, который равен 0 в моем случае, должен быть «сжатым», если this документация верна;
«Один зарезервированный бит RSV1 в кадре WebSocket заголовка выделяется для управления применением сжатия для каждого сообщения.»
Так что я не совсем уверен, куда идти отсюда. В firefox ошибка - это просто «Соединение с ws: // localhost: 8080/было прервано во время загрузки страницы». ошибка.
EDIT: Вот синтаксический анализ код при получении сообщения:
def parse(self, data, client_socket):
display_server_message("Received message:\n%s" % str(data))
byte_array = bytearray(data)
mask = []
message_string = ""
for i in range(0, len(byte_array)):
b = byte_array[ i ]
if i > 0 and i < 2:
b = b & 0b01111111
if i > 1 and i < 6:
mask.append(byte_array[ i ])
if i > 5:
b = b^mask[ (i - 2) % 4 ]
message_string = message_string + chr(b)
display_server_message("Decoded Message:\n%s" % message_string)
if (message_string == "a test message"):
time.sleep(5)
self.send_message("Hello, how are you?", client_socket)
pat = re.compile("Sec-WebSocket-Key: (\S+)", re.MULTILINE)
for match in pat.findall(data):
magic_string = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
message = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: %s\r\n\r\n" % base64.standard_b64encode(hashlib.sha1(match + magic_string).digest())
client_socket.send(message)
display_server_message("Message Sent:\n%s" % message)
Можете ли вы либо отправить полный код на свой сервер, либо захватить проводной проводник/tcpdump. Либо нужно четко указывать на проблему. – kanaka
@kanaka добавил код разбора/заголовка –
Полный исполняемый код (для пастигинга github gist) - это то, что мне нужно (чтобы я мог запустить его и быстро рассказать вам, что не так). Или захват wirehark, который позволит мне точно увидеть, что не так с сообщением. – kanaka