У меня есть особая проблема, которую я пытаюсь исправить. На сервере у меня есть следующий код ...
// Establish a connection with a WebSocket.
io.on("connection", socket => {
setTimeout(sendHeartbeat, 25000);
function sendHeartbeat(){
setTimeout(sendHeartbeat, 25000);
io.sockets.emit("ping", socket.id);
console.log(io.sockets.adapter.rooms);
}
});
Происходит следующее: я каждые 25 секунд проверяю клиент на всех существующих сокетах и отправляю идентификатор сокета подключенного клиента.
На стороне клиента я просто слушаю результат и печатаю его на консоли ...
socket.on('ping',function(data) {
console.log(data);
});
Я запускаю свой сервер, и соединение установлено, на сервере у меня есть следующее ...
{ QofufgzXeTqGJcLOAAAA: Room { sockets: { QofufgzXeTqGJcLOAAAA: true }, length: 1 } }
Это правильно, поскольку существует только 1 соединение, однако на стороне клиента консоль каждые 25 секунд выглядит следующим образом ...
undefined
QofufgzXeTqGJcLOAAAA
Не уверен, откуда исходит undefined
.
Я продолжаю позволять серверу работать, в конце концов сокет отключается, а затем снова подключается (это происходит время от времени), в этом случае старый сокет должен быть удален и заменен новым, и это именно то, что происходит на сервер ...
{ o2UFD7iHNxc94bPHAAAB: Room { sockets: { o2UFD7iHNxc94bPHAAAB: true }, length: 1 } }
Но на стороне клиента каждые 25 секунд печатается следующее ...
undefined
QofufgzXeTqGJcLOAAAA
o2UFD7iHNxc94bPHAAAB
Я пытаюсь понять, почему старые сокеты не удаляются. При каждом отключении, кажется, добавляется дополнительный сокет. Как я могу это исправить? В приведенных выше примерах на консоль должен выводиться только один идентификатор сокета.