web-dev-qa-db-fra.com

Liste des noms d'utilisateur des clients connectés utilisant le socket io

J'ai créé un client de chat avec différentes salles de chat dans NodeJS, socketIO et Express. J'essaie d'afficher une liste mise à jour sur les utilisateurs connectés pour chaque chambre.

Existe-t-il un moyen de connecter un nom d'utilisateur à un objet afin que je puisse voir tous les noms d'utilisateur lorsque je le fais:

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

puis faites quelque chose comme ceci:

users[0].username

De quelles autres manières puis-je faire cela?

Résolu: Ceci est une sorte de doublon, mais la solution n'est pas écrite très clairement nulle part, alors j'avais pensé que je l'écris ici. C'est la solution du post par Andy Hin qui a été répondu par mak . Et aussi les commentaires dans ce post.

Juste pour rendre les choses un peu plus claires. Si vous souhaitez stocker quoi que ce soit sur un objet socket, vous pouvez le faire:

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

sockets a également une méthode get, donc si vous voulez que tous les utilisateurs le fassent:

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

Comme alessioalex l'a souligné, l'API peut changer et il est plus sûr de garder une trace de l'utilisateur par vous-même. Vous pouvez le faire en utilisant l'ID de socket lors de la déconnexion.

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

Il y a des questions similaires qui vous aideront avec ceci:

Socket.IO - comment obtenir une liste des sockets/clients connectés?

Créez une liste de clients connectés en utilisant socket.io

Mon conseil est de garder une trace de la liste des clients connectés, car on ne sait jamais quand l'API interne de Socket.IO peut changer. Ainsi, à chaque connexion, ajoutez le client à un tableau (ou à la base de données) et à chaque déconnexion, supprimez-le.

42
alessioalex