Как обрабатывать отключение клиентов, которые не выходят из браузера / сайта?socketIO - PullRequest
0 голосов
/ 25 января 2019

У меня есть веб-игра в NodeJS под управлением socketIO.Код работает, но в игре есть сбой из-за того, что игроки не отключаются полностью.Под неполным отключением я имею в виду следующее: когда экран мобильного проигрывателя блокирует телефон, сервер отвечает отключенным.Это прекрасно!Однако клиент не выходит из веб-страницы в браузере телефона.Проблема / сбой возникает из-за того, что клиент может вернуться к уже загруженной веб-странице в своем браузере.Сервер чувствует это и позволяет им взаимодействовать с игрой, но никогда не запускает функцию соединения io.on.Игрок естественным образом обновляет страницу, чтобы получить текущее состояние игры, и статистика сервера начинает подстраиваться, потому что обновление запускает сначала функцию отключения io.on, а затем запускает функцию подключения io.on.Это проблема, потому что при отключении сервер увеличивает playerCount отрицательно на единицу.В конечном итоге, не полностью отключившись, то есть оставив веб-страницу загруженной в память, игрок сорта дважды отключается перед подключением.Это отбрасывает переменную playerCount.Являются ли они какими-либо очевидными или ясными решениями для исправления этой функциональности сокета?

Вот несколько строк соответствующего кода.

 io.on('connection', function(socket){

   socket.on('newPlayer', function( playerId ){
   playerCount++;
   console.log("a user connected : " + playerCount);

if(playerCount == 1){
  arrayLocationY = location1[0];
  arrayLocationX = location1[1];
}
if(playerCount == 2){
  arrayLocationY = location2[0];
  arrayLocationX = location2[1];

 socket.on('disconnect', function(){
playerCount--;
console.log("user disconnected. Player count is now :" + playerCount);
  });

Когда функция разъединения вызывается дважды, это приводит к выбросу playerCount, вызывающему будущееИгроки загружаются в неправильном месте.Я предполагаю, что эта проблема возникает, потому что даже если сервер отключил их, уже созданная HTML-страница просто ожидает повторного подключения, поэтому сервер не отвечает функцией соединения socket.on.Есть мысли по этому поводу?

1 Ответ

0 голосов
/ 13 марта 2019

Решил эту проблему с помощью кода Javascript. Если вкладка веб-страницы теряет фокус, перенаправьте пользователя на другую страницу. Таким образом, когда пользователь возвращается в браузер, страница больше не доступна.

...