Socket.io - 客户端断开连接后手动重新连接

Posted

技术标签:

【中文标题】Socket.io - 客户端断开连接后手动重新连接【英文标题】:Socket.io - Manual reconnect after client-side disconnect 【发布时间】:2012-10-12 23:41:33 【问题描述】:

我使用node.jssocket.io 创建一个实时网络应用程序。我将让用户完全控制套接字连接,例如手动断开和(重新)连接。

function socket_connect()

    console.log('func socket_connect');
    socket = io.connect('http://url/to/the/app');


function socket_reconnect()

    console.log('func socket_reconnect');
    socket_connect();


function socket_disconnect ()

    console.log('func socket_disconnect');
    if (socket) socket.disconnect();

在客户端启动时socket_connect() 函数工作正常,但使用socket.disconnect() 后,没有新的连接开始。

【问题讨论】:

“没有新的连接开始”是什么意思?即不会自动重新连接,或者当用户选择 socket_connect() 时新连接不起作用。 自动重新连接工作正常,这不是问题。看我的回答...问题解决了。 【参考方案1】:

现在可以使用 socket.socket.reconnect()

function socket_connect()

    console.log('func socket_connect');
    socket = io.connect('http://url/to/the/app');


function socket_reconnect()

    console.log('func socket_reconnect');
    socket.socket.reconnect();


function socket_disconnect ()

    console.log('func socket_disconnect');
    if (socket) socket.disconnect();

相关:https://github.com/LearnBoost/socket.io-client/issues/251

【讨论】:

【参考方案2】:

如果您使用的是 Socket.io 1.0,请尝试使用套接字上的io 管理器来处理手动断开和重新连接。

// Connect to socket.io 
var socket = io.connect('url');

function manual_disconnect() 
   socket.io.disconnect();


function manual_reconnect() 
   socket.io.reconnect();

socket上的reconnecting_attempt、reconnecting、reconnected和connected事件都应该在之后触发。

【讨论】:

令人恼火的是,socket.disconnect() 在 1.x 中仍然可用,而 socket.reconnect() 不可用。因此,kmftzg 的版本可能是最好的【参考方案3】:

您可以按照客户端配置重新连接。

 // for socket.io version 1.0
io.connect(SERVER_IP,'forceNew':true );

【讨论】:

socket.io 2 怎么样?

以上是关于Socket.io - 客户端断开连接后手动重新连接的主要内容,如果未能解决你的问题,请参考以下文章

如何检测Socket IO中的重新连接事件

Socket.io - nodejs 服务器端。重新连接后传输关闭

如何从客户端断开和重新连接 socket.io?

Socket io客户端在react-native应用程序中不断断开和重新连接

如何在 Socket.IO 中模拟连接失败

socket.io 服务器在注册客户端断开连接时非常延迟