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

acc*_*acc 16 javascript websocket node.js socket.io

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

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();
}
Run Code Online (Sandbox Code Playgroud)

在客户端启动时,该socket_connect()功能正常,但使用后socket.disconnect(),没有新的连接启动.

Pra*_*ale 17

您可以通过以下客户端配置重新连接.

 // for socket.io version 1.0
io.connect(SERVER_IP,{'forceNew':true });
Run Code Online (Sandbox Code Playgroud)


acc*_*acc 16

它现在可以使用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();
}
Run Code Online (Sandbox Code Playgroud)

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


小智 16

如果您使用的是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();
}
Run Code Online (Sandbox Code Playgroud)

之后应该全部发出套接字上的reconnecting_attempt,重新连接,重新连接和连接的事件.

  • 令人恼火的是,socket.disconnect()在1.x中仍然可用,而socket.reconnect()则不然.因此kmftzg的版本可能是最好的 (2认同)