我在NodeJS中有一个运行socketIO的网络游戏。代码有效,但由于玩家没有完全断开连接,游戏中出现了故障。我所说的未完全断开连接的意思是,当移动播放器屏幕锁定他们的手机时,服务器会响应断开连接。太棒了!但是,客户端不会在其手机浏览器中退出网页。出现问题/故障是因为客户端可能会返回到其浏览器中已加载的网页。服务器感知到这一点,并允许他们与游戏交互,但从不触发io.on连接功能。玩家自然会刷新页面以获得当前游戏状态,服务器统计数据也会开始调整,因为刷新会先触发io.on断开连接功能,然后触发io.oon连接功能。这是一个问题,因为在断开连接时,服务器会将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);
});
当disconnect函数被调用两次时,它抛出的playerCount会导致未来的玩家在错误的位置加载。我想出现这个问题是因为即使服务器断开了它们的连接,已经呈现的html页面也只是在等待重新连接,因此服务器没有使用socket.on连接功能做出响应。对这件事有什么想法吗?
用Javascript代码处理了这个问题。如果网页选项卡失去焦点,则将用户重定向到另一个页面。因此,当用户返回浏览器时,该页面不再可用。