Socket IO reconnect?

前端 未结 5 1610
终归单人心
终归单人心 2020-12-12 19:06

How to reconnect to socket io once disconnect has been called?

Here\'s the code

function initSocket(__bool){                    
    if(         


        
相关标签:
5条回答
  • 2020-12-12 19:51

    This is an old question, but I was struggling with this recently and stumbled here. Most recent versions of socket.io (>2.0) doesn't have the socket.socket property anymore as pointed out here.

    I am using socket.io-client 2.2.0 and I was facing a situation where the socket seems to be connected (property socket.connected = true) but it wasn't communicating with the server.

    So, to fix that, my solution was call socket.close()and socket.open. These commands force a disconnection and a new connection.

    0 讨论(0)
  • 2020-12-12 19:58

    Well, you have an option here ...

    The first time you initialize the socket value you should connect with io.connect,

    The next time ( after you've called disconnect once ), you should connect back with socket.socket.connect().

    So your initSocket, should be something like

    function initSocket(__bool){                    
        if(__bool){          
            if ( !socket ) {   
                socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false});     
                socket.on('connect', function(){console.log('connected')});                                 
                socket.on('disconnect', function (){console.log('disconnected')});
            } else {
                socket.socket.connect(); // Yep, socket.socket ( 2 times )
            }
        }else{
            socket.disconnect();
            // socket = null; <<< We don't need this anymore
        }
    } 
    
    0 讨论(0)
  • 2020-12-12 20:05

    I had an issue with socket-io reconnect. May be this case will help someone. I had code like this:

    var io = require('socket.io').listen(8080);
    DB.connect(function () {
        io.sockets.on('connection', function (socket) {
            initSockets(socket);
        });
    });
    

    this is wrong, becase there is a delay between open port assigned callbacks. Some of messages may be lost before DB gets initialized. The right way to fix it is:

    var io = null;
    DB.connect(function () {
        io = require('socket.io').listen(8080);
        io.sockets.on('connection', function (socket) {
            console.log("On connection");
            initSockets(socket);
        });
    });
    
    0 讨论(0)
  • 2020-12-12 20:06

    You can reconnect by following client side config.

    // 0.9  socket.io version
    io.connect(SERVER_IP,{'force new connection':true });
    
    // 1.0 socket.io version
    io.connect(SERVER_IP,{'forceNew':true });
    
    0 讨论(0)
  • 2020-12-12 20:11

    I know you already have an answer, but I arrived here because the socket.IO client reconnection feature is broken in node at the moment.

    Active bugs on the github repo show that lots of people aren't getting events on connect failure, and reconnect isn't happening automatically.

    To work around this, you can create a manual reconnect loop as follows:

    var socketClient = socketioClient.connect(socketHost)
    
    var tryReconnect = function(){
    
        if (socketClient.socket.connected === false &&
            socketClient.socket.connecting === false) {
            // use a connect() or reconnect() here if you want
            socketClient.socket.connect()
       }
    }
    
    var intervalID = setInterval(tryReconnect, 2000)
    
    socketClient.on('connect', function () {
        // once client connects, clear the reconnection interval function
        clearInterval(intervalID)
        //... do other stuff
    })
    
    0 讨论(0)
提交回复
热议问题