обнаружить socket.io отключить и уничтожить события на стороне клиента

1

У меня есть html-страница, отправленная сервером node.js и компонентом socket.io, который подключается к этому серверу следующим образом:

var socket = io();

Также несколько событий сокета:

socket.on('server-message', function(type, content) {
    ...
});

socket.on('server-update', function(type, content) {
    ...
});

Проблема в том, что в момент остановки сервера я получаю ошибки на стороне клиента:

https://example.com/socket.io/?EIO=3&transport=polling&t=LptmQyC net::ERR_CONNECTION_REFUSED

После перезапуска сервера он вылетает через 30 секунд.

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

Может быть, кто-то может помочь мне в этом.

Теги:
connection
sockets
socket.io

1 ответ

0
Лучший ответ

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

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

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

Я покажу вам, как вы можете добавить этот код для управления отключением (и предотвращения сбоев сервера после его восстановления).

Прежде всего, подключитесь к серверу:

var socket = io();

Создайте событие разъединения сразу после (btw его также код для события сбоя на стороне сервера):

socket.on('disconnect', function() {
    destroy_socket_events();
});

Создайте функцию, которая уничтожит всех ваших слушателей:

var destroy_socket_events = function() {
    socket.off('disconnect');
    socket.off('server-message');
    socket.off('server-update');
    // add all other socket events that you have in here ...
};

Теперь, что произойдет, это:

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

Таким образом, вы можете безопасно повторно инициализировать весь свой код и снова подключить слушателей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню