Node.js and Socket.IO - How to reconnect as soon as disconnect happens

前端 未结 4 1250
星月不相逢
星月不相逢 2020-12-04 06:29

I\'m building a small prototype with node.js and socket.io. Everything is working well, the only issue I\'m facing is that my node.js connection will disconnect and I\'m fo

4条回答
  •  爱一瞬间的悲伤
    2020-12-04 06:48

    edit: Socket.io has builtin-support now

    When I used socket.io the disconnect did not happen(only when i closed the server manually). But you could just reconnect after say for example 10 seconds on failure or something on disconnect event.

    socket.on('disconnect', function(){
       // reconnect
    });
    

    I came up with the following implementation:

    client-side javascript

    var connected = false;
    const RETRY_INTERVAL = 10000;
    var timeout;
    
    socket.on('connect', function() {
      connected = true;
      clearTimeout(timeout);
      socket.send({'subscribe': 'schaftenaar'});
      content.html("Connected to server.");
    });
    
    socket.on('disconnect', function() {
      connected = false;
      console.log('disconnected');
      content.html("Disconnected! Trying to automatically to reconnect in " +                   
                    RETRY_INTERVAL/1000 + " seconds.");
      retryConnectOnFailure(RETRY_INTERVAL);
    });
    
    var retryConnectOnFailure = function(retryInMilliseconds) {
        setTimeout(function() {
          if (!connected) {
            $.get('/ping', function(data) {
              connected = true;
              window.location.href = unescape(window.location.pathname);
            });
            retryConnectOnFailure(retryInMilliseconds);
          }
        }, retryInMilliseconds);
      }
    
    // start connection
    socket.connect();
    retryConnectOnFailure(RETRY_INTERVAL);
    

    serverside(node.js):

    // express route to ping server.
    app.get('/ping', function(req, res) {
        res.send('pong');
    });
    

提交回复
热议问题