使用socket.io将数组从服务器发送到客户端

时间:2015-04-24 17:59:13

标签: javascript node.js express socket.io

我正在开发一个小型聊天应用,我希望能够显示已连接用户的列表。 为此,在我的服务器端,我有:

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数组发送给每个客户端?

感谢您的帮助!

1 个答案:

答案 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中。