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

Socket.io : How to perform certain action while reconnecting after disconnection?

本文关键字:执行 操作 何执行 断开 io 连接 重新连接 Socket      更新时间:2023-09-26

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

我有如下代码.游戏很简单。一旦连接到服务器,它就会开始执行一些动画,并且会保持动画。

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

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

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

但是现在问题本身 socket.io 尝试重新连接几次.如何在重新连接过程中将连接设置为 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();


}

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

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('重新连接')获得。因此,只需在此处包含对动画的调用。

只有当从客户端调用了socket.connect时,

连接才会自动恢复,因此必须再次调用socket.connect()。