В Google Chrome я не могу подключиться к моему сокету. Получение Иногда это в консоли (желтый цвет):
WebSocket connection to 'ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=u_g7zfNFByPmMnnfAAAH' failed: WebSocket is closed before the connection is established.
И после этого (но не всегда):
POST http://www.mywebsite.com/socket.io/?EIO=3&transport=polling&t=1451326926027-5&sid=8MlGZTYdQ256ECoAAAAJ 400 (Bad Request)
Получив это в ответ:
{"code":1,"message":"Session ID unknown"}
Я должен обновлять много раз, чтобы страница могла установить соединение. В Firefox такой же код работает отлично, но иногда я получаю это.
Firefox can't establish a connection to the server at ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=tDQpo6ynbIik6FUUAAAS.
instance = new WebSocket(uri);
socket.io.js (line 5310)
The connection to ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=tDQpo6ynbIik6FUUAAAS was interrupted while the page was loading.
instance = new WebSocket(uri);
Если я запускаю свой сервер в локальном хосте, код работает нормально в обозревателе без каких-либо проблем. Мой сервер находится в узле.js, запущенном под прокси nginx. Я настроил nginx для поддержки сокетов, выполнив следующую конфигурацию:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Как я могу заверить, что мой websocket подключится без обновления страницы? Я реализовал сокеты с угловым использованием btford.
Могу ли я узнать ваш сервер, на котором размещен ваш сайт
если у него есть динамический сеанс или динамический токен, как получение изменений в каждом вызове с сервером, тогда вы можете столкнуться с этой проблемой, захватить динамический сеанс и добавить его в URL-адрес или добавить его в заголовок, это может помочь
Например
WS://www.mywebsite.com; JSESSIONID = rbgeger377377
Обновленный ответ
Я не так много знаю об сервере ubuntu,
Но в веб-сокете изначально будет выполнено рукопожатие, так как сеанс будет создан и поддерживается во всех запросах и ответах
если срок действия вашей сессии истек в течение нескольких минут, возможно, следующий сеанс заменит старый сеанс, который вы все еще выполняете
Javascript является асинхронным, если у вас есть две параллельные службы,
После того, как сеанс изменится, к тому моменту, когда следующий запрос будет начат в тот момент, когда сеанс не будет доступен в вашем запросе, но ваш сервер подумает, что он уже изменился, вот почему вы так думали,
Я не знаю точной причины, стоящей за firefox и chrome. Может быть, если вы отключили кеш в хроме, много шансов, что следующий поток потерпит неудачу
В Javascript хорошая функциональность - это двухсторонняя привязка. После того, как вы получили новый сеанс в заголовке ответа, если вы сопоставили его с URL-адресом, он автоматически привяжется к следующему запросу, используя это, чтобы вы могли избежать проблемы.
Очистка файлов cookie и кеша в течение интервала может помочь вам отладить проблему