【问题标题】:Socket.io - Manual reconnect after client-side disconnectSocket.io - 客户端断开连接后手动重新连接
【发布时间】: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() 时新连接不起作用。
  • 自动重新连接工作正常,这不是问题。看我的回答...问题解决了。

标签: javascript node.js websocket socket.io


【解决方案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 怎么样?
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-11-19
    • 2021-07-22
    • 2022-11-07
    相关资源
    最近更新 更多