Socket.io:断开连接后重新连接时如何执行某些操作?

4
我正在使用node.js和socket.io来构建一个游戏。
我有以下代码。这个游戏很简单。一旦连接到服务器,它就开始做一些动画并保持动画状态。
如果因为网络连接中断或服务器失去连接,我希望游戏能够优雅地失败,并在连接恢复后重新开始。
animate函数从服务器获取内容。如果没有连接,它将无法正常工作。我希望只有在连接时才执行animate函数。
因此,我引入了一个名为connected的变量,它应该保存连接的状态。如果connected=false,则停止动画。
但现在问题是,socket.io本身会尝试重新连接几次。在重新连接过程中如何将connected设置为false?
Game.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();




}
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()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接