【发布时间】:2012-02-06 00:13:57
【问题描述】:
我用 NodeJS、socketIO 和 Express 制作了一个带有不同聊天室的聊天客户端。我正在尝试显示每个房间的已连接用户的更新列表。
有没有办法将用户名连接到对象,以便在我这样做时可以看到所有用户名:
var users = io.sockets.clients('room')
然后做这样的事情:
users[0].username
我还可以通过哪些其他方式做到这一点?
已解决:
这有点重复,但是解决方案在任何地方都没有写得很清楚,所以我想我把它写在这里。这是Andy Hin 的post 的解决方案,由mak 回答。还有这篇文章中的cmets。
只是为了让事情更清楚一点。如果你想在套接字对象上存储任何东西,你可以这样做:
socket.set('nickname', 'Guest');
sockets 也有一个 get 方法,所以如果你想让所有用户都这样做:
for (var socketId in io.sockets.sockets) {
io.sockets.sockets[socketId].get('nickname', function(err, nickname) {
console.log(nickname);
});
}
正如alessioalex 指出的那样,API 可能会发生变化,自己跟踪用户会更安全。您可以通过在断开连接时使用套接字 id 来做到这一点。
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function() {
console.log(socket.id + ' disconnected');
//remove user from db
}
});
【问题讨论】:
-
如何在 socket.io v 1.0 以上做到这一点
-
@SojharoMangi For v 1.0+ github.com/Automattic/socket.io/blob/master/examples/chat/… 或 stackoverflow.com/a/24393900/2609085
-
@SojharoMangi 这也可能对您有所帮助stackoverflow.com/questions/24154480/…