4

我正在使用 node.js 和 socket.io 来构建游戏。

我有如下代码。游戏很简单。它一连接到服务器就开始做一些动画,并且一直在做动画。

如果互联网连接断开或服务器断开连接,我想确保游戏正常失败。一旦连接恢复,游戏就会恢复。

animate 函数从服务器获取内容。因此,如果没有连接,它将无法正常工作。我希望仅在有连接时才执行动画功能。

所以我引入了一个名为 connected 的变量,它应该保存连接的状态。如果 conncted=false ,我停止动画。

但现在问题是 socket.io 本身尝试重新连接几次。如何在重新连接过程中将 connected 设置为 false ?

游戏.js

var connected = false;

$(document).ready(function(){

//connect to socket server



socket = io.connect('/gameserver');



socket.on('connect', function() {
    connected = true;
    animate();


});

socket.on('disconnect', function() {
    connected = false;
 socket.connect();

});



});


function animate()

{

....
......
........

if (( connected ) && (..... )) animate();




}
4

1 回答 1

2

您可以使用以下内置函数来了解连接状态并相应地定义动画状态:

socket.on('disconnect', function(){}); // wait for reconnect, hold animation
socket.on('reconnect', function(){}); // connection restored, restart animation  
socket.on('reconnecting', function( nextRetry ){}); //trying to reconnect, hold animation
socket.on('reconnect_failed', function(){ message("Reconnect Failed"); });// end animation

nextRetry 指定尝试连接之前的时间,如果这有助于更新用户的状态。

此外,在与服务器断开连接时,您无需调用 socket.connect()。更新的状态将从 socket.on('reconnect') 获得。因此,只需在此处包含对动画的调用。

只有当客户端调用了 socket.disconnect 时,连接才会自动恢复,因此必须再次调用 socket.connect()。

于 2012-06-19T07:21:32.240 回答