2012-03-26 15 views
10

Quando qualcuno si connette al server nodo, tengo un array con tutte le prese. In questo modo posso trasmettere messaggi a chiunque ogni volta che è necessario o passare in rassegna gli utenti per contare il numero di utenti online, ecc.node.js non invia socket su evento disconnect

Tutto questo funziona bene, ma quando viene attivato un evento di disconnessione, non lo faccio ricevere un socket nei miei argomenti. C'è un altro modo per sapere quale socket è appena disconnesso?

Ovviamente l'esempio precedente non funziona, poiché l'evento di disconnessione non fornisce un argomento socket (o qualsiasi altro argomento). Quindi c'è un altro evento che si è verificato prima di una disconnessione in cui il socket è ancora lì?

Ali

risposta

22

È già la presa, perché il gestore di disconnessione è dichiarata nell'ambito dell'evento 'connessione'. Prova a rimuovere il parametro che stai passando al gestore 'disconnect', dovresti essere in grado di lavorare con il parametro socket dal gestore di connessione.

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

    socket.on('disconnect', function() { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

A parte questo, non occorre un allineamento presa per trasmettere, è possibile utilizzare le camere a prese di gruppo e broadcast a tutti i socket all'interno di quella stanza.

+0

se ho bisogno di inviare dati dal client al server come quello che ha fatto in 1 non funzionerà alcuna soluzione? –