Как настроить повторное подключение в socket.io?
Я создаю соединение socket.io со следующим кодом
var socket = new io.connect('http://localhost:8181', {
'reconnect': true,
'reconnection delay': 500,
'max reconnection attempts': 50
});
Но когда я убиваю сервер CTRL+C и запускаю его снова, пересоединения не происходит. Но отключить событие, поднятое на стороне клиента. Что может быть причиной этого?
Ответы
Ответ 1
Это старый вопрос, но для других людей, таких как я, которые ищут, как настроить повторное подключение в socket.io(1.x), это правильный синтаксис:
var socket = new io.connect('http://localhost:8181', {
'reconnection': true,
'reconnectionDelay': 1000,
'reconnectionDelayMax' : 5000,
'reconnectionAttempts': 5
});
Ответ 2
Я понимаю, что это старый вопрос, но у меня возникли проблемы с подключением сокета io и нашел этот пост в результатах поиска, поэтому я подумал, что буду участвовать. Попробуйте отлаживать, какие именно события запускаются с помощью следующего кода:
# coffeescript. compile if you're writing javascript, obviously.
socket.on 'connect',-> console.log 'connected'
socket.on 'reconnect',-> console.log 'reconnect'
socket.on 'connecting',-> console.log 'connecting'
socket.on 'reconnecting',-> console.log 'reconnecting'
socket.on 'connect_failed',-> console.log 'connect failed'
socket.on 'reconnect_failed',-> console.log 'reconnect failed'
socket.on 'close',-> console.log 'close'
socket.on 'disconnect',-> console.log 'disconnect'
Это должно дать вам более полное представление о состоянии клиентского сокета.
Кроме того, попробуйте просмотреть вкладку "Сеть" вашего веб-инспектора, чтобы узнать, стреляет ли XHR-запросы в качестве резервной копии. Наконец, в вашей веб-консоли попробуйте ввести io.sockets и развернуть его, чтобы увидеть, действительно ли он пытается подключиться или нет.
Я столкнулся с проблемами при повторном подключении renect_failed, и повторное соединение не перезагрузится. Ниже приведены ссылки на обсуждения этих вопросов в github.
задержка пересоединения - экспоненциальная отсрочка не восстанавливается правильно
reconnect_failed никогда не запускается
некоторые возможные исправления/обходные пути
Ответ 3
Это старый вопрос, но у меня был тот же вопрос (по другой причине) при использовании v1.4.5. Приложение моего чата прекрасно работало, но когда я нажал Ctrl+C
в терминале, мой браузер продолжал цикл и сообщал ERR_CONNECTION_REFUSED каждые несколько секунд, пока я не закрою его.
Изменение предыдущего ответа немного помогло мне решить.
Для v1.4.5, вот мой исходный код для "var socket" в файле js моего клиента:
var socket = io();
И вот решение:
var socket = io({
'reconnection': true,
'reconnectionDelay': 1000,
'reconnectionDelayMax' : 5000,
'reconnectionAttempts': 5
});
Очевидно, я мог бы изменить значения, если захочу, но важно то, что это убило бесконечные запросы пересоединения.
Ответ 4
Задержка пересоединения слишком мала на 500 мс, что, в дополнение к этому, 50 попыток используют 500 * 50 = 25000 мс, что составляет 25 секунд. Если это не помогает установить тайм-аут на событие ошибки на стороне клиента, чтобы воссоздать объект сокета (после ошибки и некоторой задержки повторить для создания соединения).