2013-01-13 16 views
5

Wiem, że socket.io ma wbudowaną funkcję ponownego połączenia i wszystko, ale nie sądzę, że działa - jak widziałem od innych, to również nie działa dla nich.node.js + socket.IO - gniazdo nie łączy się ponownie?

Jeśli użytkownik kładzie komputer w stan uśpienia, odłącza je, a gdy je otwiera, nie są już połączone, więc nie wysyłają żadnych powiadomień ani niczego, dopóki nie odświeżą strony. Być może to po prostu coś, czego nie robię poprawnie?

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") musi być wywołana, gdy użytkownik łączy się ponownie, lub przynajmniej wydarzenia, które zdarzają się w tym przypadku trzeba nazwać.

Również nie działa socket.socket.connect();, zwraca błąd i zamyka serwer gniazda z błędem "connect nie istnieje".

Odpowiedz

4

Problem związany jest z parametrami io.connect.

Spójrz na ten kod klienta (będzie starał się ponownie na zawsze, z max opóźnienie między próbami 3s):

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

Istnieją dwa ważne parametry tam, podobne do Twojego problemu:

  • limit ponownego połączenia - ograniczenie górnego czasu opóźnienia między ponownymi połączeniami. Zwykle jest coraz większy w czasie przerwy w działaniu serwera.
  • Maksymalne próby ponownego połączenia - ile razy chcesz spróbować. Wartość domyślna to 10. W większości przypadków jest to problem powodujący, że klient przestaje próbować.