У меня проблема с тайм-аутом соединения ERR с использованием socket.io всякий раз, когда пользователь теряет доступ к сети. Дело в том, что когда пользователь теряет соединение с сетью, сервер не замечает этого и кажется, что пользователь все еще может вызвать некоторые события. Как правильно отключить оба: -клиента с сервера с точки зрения клиента при сбое сети -клиента с сервера с точки зрения сервера при сбое сети
Так что в основном я разместил здесь приложение: askit-break-scheduler.herokuapp .com, если я затем подключусь к приложению и приостановлю свое подключение, например, переведя свой ноутбук в спящий режим, некоторые данные будут потеряны, и мой псевдоним будет установлен как неопределенный. Не могли бы вы помочь мне выяснить, что мне здесь не хватает? Код можно найти здесь: github.com/Hoopoe99PL/break-tracker
Я управляю подключением http следующим образом в узле:
app.get("/", (req,res)=>{
fs.readFile(__dirname + '/src/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
});
app.use(express.static(__dirname + "/src"));
, а затем управляю подключением ввода-вывода и событием отключения:
io.on("connection", (socket)=>{
//some other code here
socket.on('disconnect', ()=>{
// deleting all sessions data, clearing all entries in arrays and Maps regarding that socket
cancelUserStatus(socket.id);
users.delete(socket.id);
io.emit('u-users-list', Array.from(users));
clearInterval(intervals.get(socket.id));
intervals.delete(socket.id);
});
});
Моя проблема в том, что всякий раз, когда пользователь приостанавливает сетевое соединение, а затем пытается снова подключиться, кажется, что некоторые данные отсутствуют, например, для имени пользователя установлено значение undefined.
Я просматриваю логи сервера, и, похоже, нет никакого вывода о новом соединении, так как я печатаю идентификатор сокета нового соединения в консоли ранее в коде, а также.
Я думаю о том, чтобы заставить пользователя снова подключиться к серверу, потому что все выглядит так, как будто пользователь потерял сетевое соединение, а затем снова его получает, он сразу же подключается к приложению, но процесс проверки запускается с самого начала. приложения при вводе URL-адреса в веб-браузер, похоже, не срабатывает здесь.
Думаю, понадобятся любые обработчики на стороне клиента.
РЕДАКТИРОВАТЬ: обработчики на стороне клиента, представленные в комментариях ниже, может быть ответом, будет проверено позже.