我已经构建了一个简单的 node.js 两页应用程序。一个大厅,一个游戏室。用户连接到大厅,然后在一张桌子旁坐下,游戏室在新窗口中打开。因此打开了两个浏览器窗口,它们都有自己的套接字连接。
一切都在我的电脑上运行良好。适用于所有浏览器,并且用户在游戏室中玩游戏时在大厅中保持连接,因为我正在来回发送信号。
但是,在我的 iPad 或 iPhone 上,当我打开游戏室时,与大厅的套接字连接会在短时间内结束。
是否有强制套接字连接在与计算机不同的设备上保持打开状态的最佳做法?
这是我在服务器上的代码:
编辑:当该浏览器窗口不再关注移动设备时,与大厅的连接实际上立即结束,只是超时本身发生在超时间隔之后。
这是我的调试输出:
got pong Player1
got pong Player1
got pong Player1 got
pong Player1
got pong
Player1 { username: 'Player2',
password: 'password',
browser_os: 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3' }
info - 握手授权 Ut2WHuhbDGsYzd6CRquX (玩家 2 登录并与大厅握手)
连接到大厅
got
pong Player1 got pong Player2 (第一个 pong 来自玩家 2)
信息 - 握手授权 If6MFTkJqv3T_Mn5RquY (游戏桌为玩家 2 打开 - 注意玩家 2 不再有乒乓球!!)
got pong Player1
got pong Player1
got pong
Player1 信息 - 握手授权 agmZNNSnce0h68NSRquZ(游戏桌为玩家 1 打开)
got pong Player1
got pong Player1
got pong Player1 got
pong Player1 got pong
Player1 got pong
Player1
got pong Player1
信息 - 传输结束(心跳超时)
大厅断开连接(玩家 2与大厅断开连接)
得到了 pong Player1
这是我的服务器端代码:
function sendHeartbeat(){
setTimeout(sendHeartbeat, 8000);
io.sockets.in('lobby1').emit('ping', { beat : '1' });
}
setTimeout(sendHeartbeat, 8000);
这是我的客户端代码:
socket.on('ping',function(msg){sendPong(msg)});
function sendPong(msg) {
socket.emit('pong');
}