У меня есть 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 секунд.
Похоже, я мог бы использовать обнаружение, если сервер больше не доступен, и просто уничтожьте все связанные с сокетом события, затем снова подключитесь к обновлению страницы или к какой-то кнопке.
Может быть, кто-то может помочь мне в этом.
Я не верю, что многое может быть сделано об ошибке, ее внутренней ошибке 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 ...
};
Теперь, что произойдет, это:
Таким образом, вы можете безопасно повторно инициализировать весь свой код и снова подключить слушателей.