Подтвердить что ты не робот

Как настроить повторное подключение в socket.io?

Я создаю соединение socket.io со следующим кодом

var socket = new io.connect('http://localhost:8181', {
    'reconnect': true,
    'reconnection delay': 500,
    'max reconnection attempts': 50
});

Но когда я убиваю сервер CTRL+C и запускаю его снова, пересоединения не происходит. Но отключить событие, поднятое на стороне клиента. Что может быть причиной этого?

4b9b3361

Ответ 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 секунд. Если это не помогает установить тайм-аут на событие ошибки на стороне клиента, чтобы воссоздать объект сокета (после ошибки и некоторой задержки повторить для создания соединения).