AngularJS: WebSocket закрывается до установления соединения в Google Chrome

0

В 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.

Теги:
sockets
google-chrome

1 ответ

1

Могу ли я узнать ваш сервер, на котором размещен ваш сайт

если у него есть динамический сеанс или динамический токен, как получение изменений в каждом вызове с сервером, тогда вы можете столкнуться с этой проблемой, захватить динамический сеанс и добавить его в URL-адрес или добавить его в заголовок, это может помочь

Например

WS://www.mywebsite.com; JSESSIONID = rbgeger377377

Обновленный ответ

Я не так много знаю об сервере ubuntu,

Но в веб-сокете изначально будет выполнено рукопожатие, так как сеанс будет создан и поддерживается во всех запросах и ответах

если срок действия вашей сессии истек в течение нескольких минут, возможно, следующий сеанс заменит старый сеанс, который вы все еще выполняете

Javascript является асинхронным, если у вас есть две параллельные службы,

После того, как сеанс изменится, к тому моменту, когда следующий запрос будет начат в тот момент, когда сеанс не будет доступен в вашем запросе, но ваш сервер подумает, что он уже изменился, вот почему вы так думали,

Я не знаю точной причины, стоящей за firefox и chrome. Может быть, если вы отключили кеш в хроме, много шансов, что следующий поток потерпит неудачу

В Javascript хорошая функциональность - это двухсторонняя привязка. После того, как вы получили новый сеанс в заголовке ответа, если вы сопоставили его с URL-адресом, он автоматически привяжется к следующему запросу, используя это, чтобы вы могли избежать проблемы.

Очистка файлов cookie и кеша в течение интервала может помочь вам отладить проблему

  • 0
    размещенный сервер является 64-битным сервером Ubuntu и как получить этот динамический сеанс? и если это проблема, то почему код работает на Firefox большую часть времени, а иногда и на Chrome
  • 0
    Я обновил свой ответ, комментировать это, кажется, не очень хорошо :), лучше удачи :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню