Остановить socket.io от повторного подключения

Простой сценарий:

  • Клиент подключается к серверу с помощью socket.io(socket = io.connect(...))
  • Сбой сервера
  • Клиент пытается восстановить соединение
  • Пользователь сообщает клиенту об отключении (socket.disconnect())
  • Сервер запускает
  • Клиент повторно подключается

Кажется, что когда socket.io начинает пытаться снова подключиться, его больше не остановить. Я хочу, чтобы шаг 4 предотвратил выполнение этапа 6, но это не так. Что я должен назвать вместо этого?

Ответ 1

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

// Disables the automatic reconnection
var socket = io.connect('http://server.com', {
    reconnection: false
});

// Reconnects on disconnection
socket.on('disconnect', function(){
    socket.connect(callback);
});

Примечание: старые версии использовали reconnect вместо reconnection.

Ответ 2

Я думаю, что вам нужно настроить socket.io client, а не reconnect установить свойство reconnect в false

Я создал небольшой сервер (server.js), чтобы проверить это:

var io = require('socket.io').listen(8888);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

Затем я создал этот test.js для проверки того, что он не повторно соединяется

var client = require('socket.io-client'),
    socket = client.connect('http://localhost:8888', {
        'reconnect': false
    });

socket.on('connect', function () {
    socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
});

Для работы test.js вам нужно будет установить socket.io-client из npm, выдавая npm install socket.io-client, или добавив socket.io-client (dev -) dependency к вашему package.json.

Когда я останавливаюсь server.js, а test.js работает test.js, он немедленно вернется, и я верю, что это ваш желаемый результат. Когда я устанавливаю reconnect в true, клиент попытается подключиться к серверу, который не является желаемым поведением.

Ответ 3

В новом socket.io 1.1.x вы можете сделать следующее:

var manager = io.Manager('http://localhost:9823', { autoConnect: false });

Вот ссылка .

Ответ 4

Попробуйте следующий код:

self.socket?.manager?.reconnects = false

Ответ 5

Вы можете просто вызвать socket.disconnect(), и он перестанет пытаться восстановить соединение.