У меня есть приложение веб-сокетов и я использую socketIO для отправки сообщения на сервер для взаимодействия со второй страницей.
Страница 1 отправляет сообщение на сервер, сервер сообщает странице 2 что-то сделать . Это работает хорошо, и поскольку у меня есть много разных страниц, делающих это, я использую функцию 'rooms' SocketIO:
Page 1
function tryClose(shortCode) { //shortCode is the room name
console.log('Trying to close ' + shortCode)
socket.emit('closePlease', shortCode);
}
========= ================================================== =============== Сервер
socket.on('closePlease', function (data) {
//Send a request to any open sessions with an active browser to close the session
io.sockets.in(data).emit('closePlease');
});
========================= ================================================= Страница 2
socket.on('closePlease', function () {
console.log ('Remote request to close session received!')
//close the modal and display main menu.
socket.emit('leaveRoom', shortCode)
});
Моя проблема начинается с того, что сообщение leaveRoom
не возвращается на сервер, если пользователь потерял соединение с сервером или веб-страница была уже закрыта без запуска сообщения «leaveRoom». Это возможно, если сеть отключена и браузер закрыт, что приведет к тому, что в моем приложении NodeJS останется открытым ряд объектов и массивов. Об этом позаботится процесс leaveRoom.
Как мне изменить функцию сервера, чтобы, если сообщение closePlease не может быть доставлено на страницу, выполнялась функция leaveRoom на сервере?
Я просмотрел обратные вызовы, но получил сообщение об ошибке о невозможности использовать обратные вызовы при трансляции в комнате.
Я использую версию SocketIO: "^ 2.3. 0 ",