Socket.io: необъяснимое отключение `` транспортный конец '' после обновления

Созданный на 3 мар. 2012  ·  73Комментарии  ·  Источник: socketio/socket.io

После добавления зависимости к моему package.json сегодня я удалил свои node_modules и запустил npm_install. Я не указывал номер версии для socket.io, поэтому думаю, что он подобрал последнюю версию.

После того, как я это сделал, я заметил, что внутри? Примерно через минуту после запуска моего приложения мой сокет будет отключен, и я вижу информационное сообщение «транспортный конец» в выводе консоли node.js. У меня есть socket.io только для веб-сокетов. Я использую Chrome 13 в Linux.

Я зашел в package.json и установил для него 0.8.7, снова запустил npm install, и теперь я больше не вижу отключений.

Надеюсь, я не просто что-то запуталась. Я вернулся и повторил шаги и получил тот же результат. Извините, у меня нет более конкретной информации.

Все 73 Комментарий

В версии 0.9.1 могла появиться ошибка, из-за которой тактовые импульсы запускали преждевременные отключения.
Я изучаю это и, возможно, завтра получит 0.9.2

То же. Наблюдение за повторяющимися отключениями / повторными подключениями в Chrome и FF на Mac, на клиенте и сервере на одном компьютере.
Это легко увидеть из примеров socket.io в readme, настройки по умолчанию не затронуты.

Имея ту же проблему ... Я также заметил, что сразу после отключения сокета был создан новый сокет.

Обходной путь для меня - вручную установить тайм-аут закрытия:

io.configure( function() {
    io.set('close timeout', 60*60*24); // 24h time out
});

У меня тоже была эта проблема. Спасибо steffenwt за обходной путь.

Да, у меня тоже есть эта ошибка. Я начал изучать socket.io несколько дней назад и сначала подумал, что делаю что-то не так.

Понижение до 0.9.0 работает.

Не уверен, что это актуально, но сокет закрывается при каждом втором такте. Так оно и есть

heartbeat2 gets sent and recieved all fine
heartbeat3 gets sens but never gets recieved
disconnect

Авторизуйтесь здесь:

   debug - emitting heartbeat for client 18615332192056708826
   debug - websocket writing 2::
   debug - set heartbeat timeout for client 18615332192056708826
   info  - transport end
   debug - set close timeout for client 18615332192056708826
   debug - cleared close timeout for client 18615332192056708826
   debug - cleared heartbeat timeout for client 18615332192056708826
   debug - discarding transport

У меня тоже есть проблема.

Использую 0.91-1.

Я пробую, но есть такая проблема.

io.configure (function () {
io.set ('таймаут закрытия', 60_60_24); // 24-часовой тайм-аут
});

такая же проблема здесь

Вы переходили на 0.9.0? Теперь я пометил это как последнее на NPM

та же проблема здесь для 0.9.1-1, версия juste понижена до 0.9.0, и проблема исчезла.

В качестве обходного пути вы можете отправить несколько сообщений keep-alive от клиента, скажем, на 20 секунд, и сразу же ответить на них с сервера:

клиент: setInterval (function () {socket.emit ("keep-alive", null)}, 20 * 1000);
сервер: socket.on ('keep-alive', function (data) {socket.emit ('keep-alive', null);});

FWIW: если вы обслуживаете клиента с другого сервера, и код вашего

Я понизил версию socket.io до 0.9.0 и все еще видел проблему. Затем я понизил версию socket.io-client до 0.9.0, и у меня не было разрыва соединения.

Кроме того, неудачные транспорты, которые я пробовал, - это веб-сокеты и xhr-опрос.

Этот вопрос должен быть закрыт, верно?

У меня точно такая же проблема. Но я заметил, что это потому, что у меня есть haproxy.

Моя проблема здесь:

frontend all 0.0.0.0:80
    default_backend www_backend
    acl is_websocket path_beg /socket.io
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws
    timeout client 1000

Прямо в строке «тайм-аут клиента 1000» (я изменил его на 1 секунду, чтобы посмотреть, была ли это проблема, и это было ...).

Итак, теперь я ищу, есть ли способ изменить его только для бэкэндов websocket.

Надеюсь, это кому-то поможет: +1:

К вашему сведению, я все еще вижу эту проблему с xhr-polling и 0.9.14. Каждые 25 секунд происходит принудительное отключение. Журнал идентичен приведенному выше.

Я также могу проверить, что это происходит с сервером 0.9.14 и клиентом 0.9. Хотя он не отключается каждые 25 секунд, он отключается периодически. Я отследил это до вызова stream.emit ('end'); в _stream_readable.js node.js. Я думаю, это результат чтения EOF в буфере.

@citosid, почему тайм-аут клиента haproxy вызывает это?

Бывает с 0.9.16. То же, что и для BoarK

Поддержка socket.io мертва?

@joefaron Чтобы он умер,

Та же проблема здесь с Socket.io 0.9.16 - соединение разрывается каждые ~ 25 секунд и в журналах одновременно отображается «сбрасывание транспорта».

Переход на 0.8.6 устранил практически все для меня .. и я использую
jsonp-polling вместо xhr-polling в качестве резервной копии для websocket .. кажется далеким
более стабильный.

В воскресенье, 26 января 2014 г., в 10:16, Аран Рикс [email protected] написал:

Та же проблема здесь с Socket.io 0.9.16 - соединение разрывается каждые ~ 25
секунды и журналы, показывающие одновременно «отбрасывание транспорта».

-
Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps: //github.com/LearnBoost/socket.io/issues/777#issuecomment -33325205.
.

Привет @joefaron , приветствую вашу помощь.

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

Мне удалось воспроизвести эту ошибку как в Firefox, так и в текущей стабильной сборке Chrome (32.0.1700.76 m).

Первоначально я попытался полностью отключить сердцебиение, поскольку для нашего приложения они действительно не потребовались, это можно сделать следующим образом (в соответствии с текущими документами, хотя, когда я пробовал это, казалось, что все методы транспорта были удалены, и в конечном итоге постоянно сбой и перезапуск).
io.set('heartbeats', false);

Поскольку это не удалось, моей следующей попыткой было увеличить тайм-аут между запросами пульса, что можно сделать, используя следующее в вашем app.js:
io.set('heartbeat timeout', 99999); // 99999 being the time between requests in seconds - Default is 25, please choose your value as applicable for your applications

Это сработало для нашего приложения, так как мы не заботимся об отключении клиентов, хотя это может быть нецелесообразным вариантом в вашей среде.

Для всех, у кого есть эта проблема, если это поможет, моя среда выглядит следующим образом:
NodeJS: v0.10.24 Socket.io: v0.9.16 Centos 6.5

Я считаю, что это действительно актуальная / критическая проблема. Почему это до сих пор не решено? Прошло два года с момента начала этой ветки выпуска.

У меня тоже возникла эта проблема:

NodeJS: v0.10.24
Socket.io: v0.9.16

д-оливерос: Я настоятельно рекомендую перейти на 0.8.6. У меня не было этого
проблема .. и я не думаю, что последняя сборка будет исправлена ​​в ближайшем будущем.

В субботу, 15 февраля 2014 г., в 20:55, d-Oliveros [email protected] написал:

Я считаю, что это действительно актуальная / критическая проблема. Почему этого не было
уже решено? Прошло два года с момента начала этой ветки выпуска.

У меня тоже возникла эта проблема:

NodeJS: v0.10.24
Socket.io: v0.9.16

Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps: //github.com/LearnBoost/socket.io/issues/777#issuecomment -35177466
.

Попробуйте новый master , эта проблема исчезла.

Будет ли выпуск 0.9.17 включать исправление этой проблемы?

@fgnass, можете ли вы воспроизвести это с помощью 1.0.0-pre ?

@guille пока выглядит неплохо! Я дам вам знать, если когда-нибудь повторится.

Привет, @guille , есть ли способ

+1 за @eggysplat

@ aran112000 благодарит за обходной путь heartbeat timeout . У меня работает на v0.9.16.

На самом деле я нашел причину, по которой у меня возникла эта проблема. Очень неловко, я думал, что использую v0.9.16, тогда как на самом деле я использовал v0.9.0 с этой ошибкой. Это было исправлено в v0.9.2 с помощью https://github.com/LearnBoost/socket.io/commit/57a0b2406004e46ec34729392ee289191a4f78e7 и https://github.com/LearnBoost/socket.io/commit/df5f23d3091cf2be289bf9bf6d3d3d03b2bf6b2bf6d5d06d5d06d5

Убедитесь, что у вас нет heartbeat interval больше, чем heartbeat timeout как это было в v0.9.0.

редактирование сообщения, чтобы другие могли быть осведомлены:

потратил несколько часов на отслеживание ошибок, пока не решил проверить проблему с моим Mac. похоже, что мой антивирус на Windows 8 также блокировал соединения и вызывал сбой. после удаления все работает нормально.

соответствующий пост на самом деле здесь, но его довольно сложно найти.
https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

Я как бы начинал работать с socket.io, и это заняло у меня больше двух дней. После отправки / получения данных клиент отключается и повторно подключается, поэтому значение socket.id изменяется

socket.io:client client close with reason transport close +39s
socket.io:socket closing socket - reason transport close +44s
.
.
.
socket.io:namespace adding socket to nsp / +4.1m
socket.io:socket socket connected - writing packet +1s

Наконец, я обнаружил, что внутри обратного вызова есть исключение, поэтому socket.io автоматически отключается и снова подключается к системе.

socket.on('someEvent', function(){
    var a = null;
    a.b; //You won't be aware of this error, this error is suppressed and won't be shown on console. 
         //Moreover, it disconnects and reconnects
})

Также см. Этот комментарий

Итак, он тихо ловит ошибку и ничего не показывает мне на консоли. Почему он подавляет ошибку и отключает / повторно подключается, даже не уведомив меня?

1.3.5 ошибки все еще есть

Это?

Да, проблема все еще существует в 1.3.5 ...

Проблема все еще существует

Да, проблема все еще возникает в 1.3.5, пожалуйста, исправьте

Я думаю, что это проблема тайм-аута клиента haproxy, как указал

У меня такая же проблема, но я не использую haproxy. Кто-нибудь знает последнюю версию, где это работало?

Хорошо, я также получаю сообщения о том, что проблема не решена на 100% в нашей системе. Забавно то, что я мог надежно воспроизвести проблему, установив «timeout client 1» в haproxy равным одной секунде, и испытать ошибку в нашем интерфейсе.

В связи с этим я увеличил «клиент тайм-аута» до большего числа и подумал, что проблема исчезнет, ​​так как для keepalive / heartbeat socket.io будет достаточно времени, чтобы обновить соединение. Это предположение, скорее всего, неверно, и я буду держать вас в курсе, если узнаю больше.

Я разместил это в сообщении stackoverflow, и для некоторых из вас это может решить эту проблему:
"Похоже, что HackTimer.js и ccapture.js заменяют window.setTimeout настраиваемой функцией. HackTimer.js, похоже, работает нормально, если он выполняется раньше любого другого JavaScript. Для ccapture.js вы можете попытаться убедиться, что он запускается как первый скрипт. Итак, SocketIO сначала использует собственный setTimeout вашего браузера, который затем сдувается настраиваемым setTimeout, который прерывает работу любого из запущенных в данный момент таймеров ».

Найдите свой код, чтобы узнать, заменяет ли его одна из ваших библиотек:

ag 'window.setTimeout\s*='

Вы также можете проверить в своей консоли, был ли вообще изменен setTimeout:

/native/.test(window.setTimeout) // returns true for the native function and false for a custom one

Эта ошибка все еще существует? Я обновился до основной версии, и любое мобильное устройство отключается примерно через 2 минуты с уведомлением о закрытии транспорта.

Это было то, что заставило меня отказаться от socket.io 1> и удержать меня на socket.io 0.9.17. Но теперь я пытаюсь снова, установить пинг-понг вручную на сервере, чтобы он оставался живым, и теперь отключается через 19 минут .. интервал каждые 35 секунд ..

Если я запускаю socket.io 0.9.17, этой проблемы нет ... но я больше не хочу ее использовать, поскольку она устарела. Любая помощь, это происходит в браузере на мобильных устройствах.

@utan каковы шаги воспроизведения?

Привет @rauchg!

Спасибо за ответ..

1) Установите socket.io 1.4.0
2) установите конфигурацию nginx на прокси

                        proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                proxy_pass http://io_nodes;

3) Установите клиента с помощью socket.io 1.4.0 / 2015-11-28
4) Подключите мобильное устройство ..
5) Оставьте мобильный браузер подключенным к вашему приложению, а затем оставьте телефон в режиме ожидания.

затем журналы;

  engine:polling compressing +0ms
  engine:socket executing batch send callback +1ms
PuTTY  engine intercepting request for path "/socket.io/" +95ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=L8YVUt6&sid=DJNvvkhmCQew_3vGAAAB" +0ms
  engine setting new request for existing client +0ms
  engine:polling setting request +0ms
  engine:socket transport error +6s
  engine:polling closing +2ms
  engine:polling transport writable - closing right away +0ms
  engine:polling writing "�1" +0ms
  socket.io:client client close with reason transport error +0ms
  socket.io:socket closing socket - reason transport error +0ms

Вы отключаетесь через 3–4 минуты ..

При использовании опроса вы получите этот журнал ошибок;

 engine:socket executing batch send callback +1ms
PuTTY  engine intercepting request for path "/socket.io/" +106ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=L8YXgi6&sid=skadf3It4qBRi0S0AAAC" +1ms
  engine setting new request for existing client +0ms
  engine:polling setting request +0ms
  engine:socket transport error +3s
  engine:polling closing +0ms
  engine:polling transport writable - closing right away +0ms
  engine:polling writing "�1" +0ms
  socket.io:client client close with reason transport error +1ms
  socket.io:socket closing socket - reason transport error +2ms
  engine intercepting request for path "/socket.io/" +373ms
  engine handling "POST" http request "/socket.io/?EIO=3&transport=polling&t=L8YXhdB&sid=skadf3It4qBRi0S0AAAC" +0ms

Итак, @rauchg закрыл его?

На самом деле не думаю, что тебе стоит.

Я этого не сделал.

@rauchg ,
Итак, это нормальное поведение для socket.io сейчас? Изменилось ли что-то в протоколе WS, который теперь отключает пользователей на мобильных устройствах, если они не подключены к плагину и они простаивают?

Я бьюсь головой о стену из-за этой проблемы, это не позволяет мне завершить обновление ... и реорганизовать мой код с помощью нового socket.io ...
Мой сервер Ubuntu 10.10
Версия Nginx: Nginx / 1.8.0
Node v0.10.31 // если обновлюсь до 4.0 то же самое ..

используя https и Nginx для проксирования socket.io ..

Есть ли у кого-нибудь еще такие же проблемы или только у меня?

Я думаю, что мне тоже может быть ... очень трудно определить мое дело. Я использую sails.js с socket.io.

убунту 14.04
узел v5.3.0
npm v 3.3.12
паруса. [email protected]
socket.io@~1.4.3

Мой клиент представляет собой смесь socket.io-client и sails.io.js:

var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');
var io = sailsIOClient(socketIOClient);
io.socket.on('connect', function(data){....})

Таким образом, первоначальное соединение длится вечно ... но затем после .emit () или .broadcast () этому клиенту сервер выгружает клиента через ~ 25 секунд до 1 минуты И ... клиент не получает уведомления об отключении . Он думает, что все еще подключен.

Очень неприятно.

У меня аналогичная проблема, но только если я использую безопасный сокет (wss вместо ws). С ws все работает нормально, но с wss соединение периодически обрывается в случайное время (~ 15 минут). Никаких межсетевых экранов, никаких прокси.

Спасибо @andrin-n-dream. Я думаю, что моя тоже связана с SSL. У меня есть машина с Windows в качестве клиента и моя ubuntu vm (та же машина) в качестве сервера. Мостовой сетевой адаптер. Никогда не было проблем с общим сетевым подключением.

Происходит на SSL независимо от того, использую ли я завершение SSL nginx или sails.js.

НАВЕР - http://www.naver.com/

Письмо отправлено на


Получатель заблокировал получение вашей электронной почты.


Я отлаживал вечно и не мог найти другого решения для SSL, кроме как повторно подключиться вручную. Было бы здорово, если бы engine.io сделал это за меня и повторил бы попытку, когда транспорт будет закрыт.

есть ли решение для этого? у меня точно такая же проблема. через несколько секунд я получаю тайм-аут пульса в журнале отладки с сервера, но клиент все еще думает, что он подключен.

Что ж, из-за других насущных проблем я обновил свой env, и теперь это отложено. Было бы неплохо увидеть, имеет ли значение node 6.5.0. Sails.js обновил некоторые пакеты и изменил использование этих низкоуровневых функций ...

У меня просто нет времени снова углубляться в это прямо сейчас, поскольку я мигрирую огромное количество устаревшего C ++. Может, позже в этом году или в январе.

это все еще происходит на 2.0.3 ...
https://github.com/socketio/socket.io/issues/3025

без обходного пути socket.io в основном непригоден для использования, потому что 25% ваших клиентов будут иметь эту проблему.

io.set ('таймаут сердцебиения', 99999);

@ Aaron1011 Это должен быть серверный или клиентский код? Если это серверная сторона, нужно ли что-то менять на стороне клиента?

Пытался:
io.set ('таймаут сердцебиения', 99999);
На стороне сервера так и не устранил проблему с помощью socket.io v 2.0.3. Теперь попробую понизить версию до 0.8.6.

Невозможно понизить до 0.8.6, потому что это действительно огромная кроличья нора. Изменился весь синтаксис, и поскольку нет документации, которую я смог найти по 0.8.6, это безнадежное дело. Мне действительно не хочется переписывать свое приложение, чтобы перейти на более раннюю версию, в надежде, что это поможет решить эту проблему.

Есть у кого-нибудь идеи / исправления для v2.03? Вещи, которые я пробовал:

  • установите pingInterval на 9999999
  • установите pingTimeout на 99999999
  • автоматическая отправка сообщений в качестве keep-alive. Я отправляю сообщение каждые 1 секунду, но все равно получаю случайные отключения.
  • Отключенный брандмауэр
  • Пробовал с включением / выключением опроса XHR
  • Изменен порт с случайного на 80

Я уверен, что это не ошибка кодирования, но она специфична для ПК, так как на одних она случается, а на других - нет. Это может иметь какое-то отношение к сетевому адаптеру.

@forgeableSun, вы должны написать приложение ur на основе Primus, я реорганизовал свое приложение с помощью Primus и в настоящее время использую с ним socketJs ..

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

С Уважением.

@utan Я бы хотел попробовать. но как именно переключиться с socket.io с помощью одной строчки кода? Похоже, примеров перехода с других фреймворков нет.

npm install browserchannel --save

вар примус = новый примус (сервер, {преобразователь: 'канал браузера'});

https://github.com/primus/primus/blob/master/README.md#supported -real-time-frameworks

Надежда помогает.

какое отношение имеет канал браузера к socket.io?

Это просто пример того, как переключиться на другой фреймворк ..

Как вы просили для примера ..

хорошо, но socket.io даже не указан как одна из поддерживаемых фреймворков реального времени. Для переключения API никогда не бывает просто одной строчки кода, я не понимаю, как в документации можно рекламировать это без каких-либо примеров.

Послушайте, socket.io глючит после> = 1, у него странные отключения, я предлагаю использовать primus, чтобы вы могли переключиться на другой фреймворк ..

Вот почему я привел вам пример, конечно, вам нужно будет провести рефакторинг кода, чтобы использовать примус, тогда после того, как вы сможете попробовать разные фреймворки, чтобы увидеть, какой из них лучше всего подходит для вас, или, если один сломается, вы используете другой ..

С Уважением

@utan Понятно , я думал, что это преобразователь для переключения с одного фреймворка на другой со всем приложением, написанным в этом фреймворке (например, адаптером). Но на самом деле это преобразователь для плавного перехода на фреймворки со всем приложением, написанным на примусе.

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

С Уважением.

Мои журналы сервера:
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»
клиент отключен. Причина отключения: «транспорт закрывается»

Перешел на ws (https://github.com/websockets/ws), что потребовало огромных перезаписей, но теперь я использую собственный объект браузера websocket на стороне клиента, и все работает отлично. У меня больше нет проблемы. Прощай, socket.io!

Через 10-30 минут у меня случались случайные отключения. Я вспомнил, что моя служба хостинга запускает NodeJS с Passenger на общем сервере Apache. Я действительно этого не понимаю, но в основном при такой интеграции могут возникнуть проблемы с веб-сокетами. Я тестирую с настройкой транспортов: только ['polling'], в то время как на локальном хосте я запускаю транспорты: ['websockets', 'polling'] без ошибок и выпадений. Пока все хорошо через 30 минут ...

Была ли эта страница полезной?
0 / 5 - 0 рейтинги