如何处理不退出浏览器/网站的断开连接客户端?套接字IO

时间:2019-01-24 21:24:20

标签: node.js socket.io connection disconnection

我在NodeJS中有一个运行socketIO的网络游戏。该代码有效,但由于玩家未完全断开连接而在游戏中引起了故障。我的意思是不完全断开连接是-当移动播放器屏幕锁定手机时,服务器会响应断开连接。这太棒了!但是,客户端不会在其电话浏览器中退出网页。出现问题/故障是因为客户端可能会返回到其浏览器中已加载的网页。服务器感知到这一点,并允许他们与游戏进行交互,但从不触发io.on Connection功能。玩家自然会刷新页面以获取游戏的当前状态,并且服务器统计信息将开始调整,因为刷新首先触发io.on断开功能,然后触发io.on连接功能。这是一个问题,因为在断开连接时,服务器会将playerCount负数增加一。最终,由于没有完全断开连接(也就是将网页加载到内存中),播放器排序在连接之前断开了两次。这抛出了playerCount变量。他们是否有任何明显或清晰的解决方案来修复此socketio功能?

以下是几行相关代码。

 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 :(得分:0)

使用Javascript代码解决了此问题。如果网页选项卡失去焦点,则将用户重定向到另一个页面。因此,当用户返回浏览器时,该页面不再可用。