Я сделал клиент чата с разными комнатами чата в NodeJS, socketIO и Express. Я пытаюсь отобразить обновленный список подключенных пользователей для каждой комнаты.
Есть ли способ связать имя пользователя с объектом, чтобы я мог видеть все имена пользователей, когда я это делаю:
var users = io.sockets.clients('room')
, а затем делаю что-то вроде этого:
users[0].username
Как еще я могу это сделать?
Решено: Это своего рода дубликат, но решение нигде не написано очень четко, поэтому я подумал, что запишу его здесь.Это решение сообщения от Энди Хина , на которое ответил mak . А также комментарии в этом посте.
Просто чтобы немного прояснить ситуацию. Если вы хотите сохранить что-либо в объекте сокета, вы можете сделать следующее:
socket.set('nickname', 'Guest');
сокеты также имеют метод get, поэтому, если вы хотите, чтобы все пользователи делали это:
for (var socketId in io.sockets.sockets) {
io.sockets.sockets[socketId].get('nickname', function(err, nickname) {
console.log(nickname);
});
}
Как указал alessioalex , API может измениться, и безопаснее отслеживать пользователя самостоятельно. Вы можете сделать это, используя идентификатор сокета при отключении.
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function() {
console.log(socket.id + ' disconnected');
//remove user from db
}
});