我正在开发一个小型聊天应用,我希望能够显示已连接用户的列表。 为此,在我的服务器端,我有:
var users = {};
io.on('connection', function(socket){
socket.on('newUser', function(pseudo) {
socket.pseudo = pseudo;
users[socket.pseudo] = socket;
io.sockets.emit('newUser', pseudo);
console.log(Object.keys(users));
});
如果我连接用户root,控制台会将[ 'root' ]
发回给我。
这就是我在客户方面所拥有的:
var pseudo = '#{user.username}';
socket.emit('newUser', pseudo);
socket.on('newUser', function(pseudo) {
$('#messageZone').append('<p><em>' + pseudo + ' just joined the conversation !</em></p>');
});
所以我的问题是,如何在每个客户端连接自己并将其显示在users
时将完整更新的div
数组发送给每个客户端?
感谢您的帮助!
答案 0 :(得分:2)
如果您只想将所有当前连接的用户从服务器发送给所有其他用户,您可以这样做:
io.sockets.emit('allUsers', Object.keys(users));
并且,在客户端将此列表设置为div:
socket.on('allUsers', function(listOfUsers) {
$('#allUsers').html(listOfUsers.join(", "));
});
这将获得users
对象的键列表,看起来它是每个用户的pseudo
值。该数组将变为JSON,发送给每个客户端。然后,每个socket.io客户端将JSON解析回一个数组,然后您将在客户端上收到一个数组,然后您可以将其放入HTML中。