2013-01-13 14 views
5

So che socket.io ha una funzione incorporata per la riconnessione e tutto, tuttavia non penso che funzioni, come ho visto anche da altri, non funziona neanche per loro.node.js + socket.IO - socket non ricollegabile?

Se un utente mette il proprio computer in stato di stop, lo disconnette e quindi quando lo riapre non sono più connessi, quindi non ricevono alcuna notifica o altro finché non aggiornano la pagina. Forse è solo qualcosa che non sto facendo correttamente?

var io = require('socket.io').listen(8080); 
var users = {}; 

////////////////USER CONNECTED///// 

console.log("Sever is now running"); 

io.sockets.on('connection', function (socket) { 

    //Tell the client that they are connected 
    socket.emit('connected'); 

    //Once the users session is recieved 
    socket.on('session', function (session) { 

     //Add users to users variable 
     users[socket.id] = {userID:session, socketID:socket}; 

     //When user disconnects 
     socket.on('disconnect', function() { 

     //socket.socket.connect(); 

      var count= 0; 
      for(var key in users){ 
       if(users[key].userID==session)++count; 
       if(count== 2) break; 
      } 
      if(count== 1){ 
       socket.broadcast.emit('disconnect', { data : session}); 
      } 

      //Remove users session id from users variable 
      delete users[socket.id]; 
     }); 


     socket.on('error', function (err) { 
      //socket.socket.connect(); 
     }); 

socket.emit("connection") deve essere chiamata quando l'utente si riconnette, o per lo meno hanno bisogno di essere chiamati gli eventi che accadono in tal caso.

Anche socket.socket.connect(); non funziona, viene restituito con un errore e chiude il server socket con un errore di "connessione inesistente".

risposta

4

Il problema è correlato ai parametri io.connect.

Guardate questo codice cliente (che proverà a riconnettersi per sempre, con un ritardo massimo tra i tentativi di 3 sec):

ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000} 
socketAddress = null 
socket = io.connect(socketAddress, ioParams) 

Ci sono due parametri importanti là fuori, in relazione al tuo problema:

  • limite di riconnessione - limita il tempo massimo di ritardo tra i tentativi di riconnessione. Normalmente sta diventando sempre più grande in caso di interruzione del server
  • tentativi di riconnessione massimi - quante volte si vuole provare. L'impostazione predefinita è 10. Nella maggior parte dei casi questo è il problema per cui il client smette di provare.