Сервер не отправляет ответ HTTP 101 при создании веб-сокета с использованием CC3000 и socket.io

Я подключаю CC3000 к серверу node.js, используя socket.io. Я использовал следующую библиотеку для создания веб-сокета https://github.com/chadstachowicz/socket_io_arduino_cc3000

В SocketIOClient.cpp он создает TCP-соединение, получает идентификатор сеанса (sid). Он отключает и создает другое TCP-соединение и использует sid для обновления соединения до websocket. Для этого клиент (здесь CC3000) отправляет следующую информацию заголовка:

client.print(F("GET /socket.io/1/websocket/"));
client.print(sid);
client.println(F(" HTTP/1.1"));
client.print(F("Host: "));
client.println(hostname);
client.println(F("Origin: ArduinoSocketIOClient"));
client.println(F("Upgrade: WebSocket"));    // must be camelcase ?!
client.println(F("Connection: Upgrade\r\n"));

После этого запроса клиент ожидает ответа HTTP 101 от сервера. Но сервер не отправляет никакого ответа. Это регистрирует как предупреждение "соединение websocket недействительно" и завершает соединение.

Подходит ли протокол для создания websocket или в шапке отсутствует информация?

Кроме того, я хочу знать, какой должна быть ценность "Происхождения"? Во время первого рукопожатия это "Arduino", тогда как во втором рукопожатии это "ArduinoSocketIOClient".

1 ответ

Решение

Вы скучаете по Sec-WebSocket-Key а также Sec-WebSocket-Version Заголовки, ключевая часть рукопожатия протокола WebSocket.

Вот как выглядит настоящее рукопожатие:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
Другие вопросы по тегам