Ошибка во время рукопожатия WebSocket: отсутствует заголовок «Соединение» - PullRequest
0 голосов
/ 16 декабря 2018

Я совершенно новичок в Node и еще новее в Socket.io.Я только что получил свое первое чат-приложение онлайн на spaiglas.com, которое работает, несмотря на ошибку в консоли разработчика, которая довольно проста ...

WebSocket connection to 'ws://example.com/...' failed
: Error during WebSocket handshake
: 'Connection' header is missing

Вот кодовая ручка со всем моим кодом.Я загрузил его своему хостинг-провайдеру, который использует Passenger через cPanel на сервере Apache в среде Node 9.11.2.

Из того, что я читал, заголовки 'Connection' не могутбыть установлен с использованием AJAX, который предположительно представляет угрозу безопасности, но вместо этого обрабатывается сервером?Можно ли вручную установить этот заголовок?

Я заметил, посмотрев на заголовки, что на ранних этапах обычно один из них всегда успешно переключает / обновляет протокол до WebSockets, но затем платформа, кажется, всегда возвращается кHTTPS / опрос.В приведенном ниже примере, который я наблюдал только что, было фактически 2 из 67 случаев, когда он успешно переключился и использовал протокол WebSockets.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 16 декабря 2018

Вам нужно инициализировать socket.io перед тем, как запустить HTTP-сервер, который прослушивает порт 80. В документах это ...

var http = require('http').Server(app);
var io = require('socket.io')(http);

А потом вы вызываете http.listen(3000, ...).Это запустит сокет.

На клиенте ваш путь также неверен.Websockets - это протокол (ws://somedomain.com), такой же, как HTTP.Когда вы подключаетесь через http://, это другой протокол.Я бы либо ничего не передавал, либо использовал пространства имен, которые вы можете найти в документации по socket.io.

Socket.io возвращается к длинному опросу и иногда даже не использует веб-сокеты (отчасти поэтому он медленнее, чем библиотеки типа ws на npm).Из-за этого передача http: // в io (...) на клиенте не может быть неправильной с его библиотекой, но я все равно удалил бы это и сделал бы мое предложение выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...