2012-01-09 1 views
31

Ho creato un client di chat con diverse chat room in NodeJS, socketIO ed Express. Sto cercando di visualizzare un elenco aggiornato sugli utenti connessi per ogni stanza.Elenco dei nomi utente dei client connessi tramite socket io

C'è un modo per collegare un nome utente per un oggetto così ho potuto vedere tutti i nomi utente quando lo faccio:

var users = io.sockets.clients('room') 

e poi fare qualcosa di simile:

users[0].username 

In quale altro modi posso farlo?

risolto: Questa è una sorta di un duplicato, ma la soluzione non è scritto molto chiaramente da nessuna parte così avevo pensato lo scrivo qui. Questa è la soluzione dello post entro il Andy Hin a cui è stata data risposta da mak. E anche i commenti in questo post.

Solo per rendere le cose un po 'più chiare. Se si desidera memorizzare qualsiasi cosa su un oggetto socket si può fare questo: ha

socket.set('nickname', 'Guest');  

prese anche un metodo get, quindi se si desidera che tutti gli utenti che fare:

for (var socketId in io.sockets.sockets) { 
    io.sockets.sockets[socketId].get('nickname', function(err, nickname) { 
     console.log(nickname); 
    }); 
} 

Come alessioalex rilevare , l'API potrebbe cambiare ed è più sicuro tenere traccia dell'utente da solo. È possibile farlo utilizzando l'ID socket su disconnect.

io.sockets.on('connection', function (socket) { 
    socket.on('disconnect', function() { 
     console.log(socket.id + ' disconnected'); 
     //remove user from db 
    } 
}); 
+0

possibile duplicato di [Socket.IO - come ottengo un elenco di socket/client connessi?] (Http://stackoverflow.com/questions/6563885/socket-io-how-do-i-get-a -list-of-connected-sockets-clients) – alessioalex

+0

come farlo in socket.io v 1.0 sopra –

+1

@SojharoMangi Per v 1.0+ https://github.com/Automattic/socket.io/blob/master/examples /chat/index.js#L35-L36 O http://stackoverflow.com/a/24393900/2609085 – guptakvgaurav

risposta

40

Ci sono domande simili che vi aiuterà con questo:

Socket.IO - how do I get a list of connected sockets/clients?

Create a list of Connected Clients using socket.io

Il mio consiglio è quello di mantenere tenere traccia da soli della lista di clienti collegati, perché non si sa mai quando l'API interna di Socket.IO può cambiare. Quindi su ogni connessione aggiungi il client a un array (o al database) e su ogni disconnessione rimuovilo.

+0

Ho provato a tenere traccia da solo, ma come faccio a sapere quale utente si disconnette? Ho provato a creare una funzione che ping tutti i client quando qualcuno si disconnette, ma questa non era una soluzione molto affidabile. – kimpettersen

+6

io.sockets.on ('connection', function (socket) {socket.on ('disconnect', function() {console.log (socket.id + 'disconnected';}); <= così tramite socket.id , questa è l'unica cosa unica della connessione – alessioalex

+0

Felice di aiutare, dal modo in cui puoi accettare e invertire la mia risposta se fosse utile a te. – alessioalex