Остановить 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()
, и он перестанет пытаться восстановить соединение.