maj*_*nie 12 node.js socket.io
在制作中,我有一个游戏,它使用连接局部变量来保持游戏状态.但是我注意到如果我在连接上空闲一段时间,它会断开并重新连接,从而失去当前状态.在我对本地主机的测试期间,我从未注意到这种行为.这是套接字连接的规范行为还是导致连接丢失的其他因素.
如果这是正常行为,通常如何处理?是否应该全局存储连接值,以便在用户放下/重新连接时可以恢复它们?
Moo*_*oox 25
你的问题是套接字超时.如果某个套接字上没有活动,socket.io将自动关闭它.
一个简单(和hackish)修复是向连接的客户端发送心跳以创建活动并停止套接字超时.
服务器:
function sendHeartbeat(){
setTimeout(sendHeartbeat, 8000);
io.sockets.emit('ping', { beat : 1 });
}
io.sockets.on('connection', function (socket) {
socket.on('pong', function(data){
console.log("Pong received from client");
});
}
setTimeout(sendHeartbeat, 8000);
Run Code Online (Sandbox Code Playgroud)
客户:
socket.on('ping', function(data){
socket.emit('pong', {beat: 1});
});
Run Code Online (Sandbox Code Playgroud)
更多信息:
编辑:马克评论说,如果用户确实失去了连接(由于互联网故障导致连接丢失),您应该能够将用户恢复到他的最后状态.
要做到这一点,最好的方法是使用已经广泛使用的方法来存储用户数据,cookie和会话.
如何做到这一点的非常出色的教程就设在这里.虽然他使用express来设置cookie,但你可以使用任何东西(我用rails做).使用此方法,您可以将用户数据存储在cookie中并在握手期间获取它.从那里你可以使用访问数据socket.handshake.data.
| 归档时间: |
|
| 查看次数: |
19624 次 |
| 最近记录: |