Javascript数组数据(在套接字IO应用程序中)

时间:2012-02-10 00:16:52

标签: javascript arrays node.js socket.io

首先,这是我的代码:

var users = {};

//User Connect
io.sockets.on('connection', function (socket) {
    socket.emit('connected');
    socket.on('session', function (session){

     users[socket.id] = [session, socket];
     console.log(users);
     socket.emit("session_established");

     //User Disconnect
     socket.on('disconnect', function (){ 
         delete users[socket.id];
         socket.broadcast.emit('disconnect', { data : session});
    }); 


    //The above all works as it should, now here it what I want to do:

    socket.on('chatMessage', function (message, userID) {
    users[userIDsSocket][userID].emit('chatMessageResponse', { data: message});
    });


    });    
});

这是我的数据的样子,(这适用于一个用户):

{ '17819180631362480757': //this value is users[socket.id]
[ '1',               //this value is session at the top, and in the bottom part userID 
 { id: '17819180631362480757', //The rest of this is the socket data
   namespace: [Object],
   manager: [Object],
   disconnected: false,
   ackPackets: 0,
   acks: {},
   flags: [Object],
   readable: true,
   store: [Object],
   _events: [Object] } ] }

所以这就是我需要做的事情(只是用它应该如何运作的英语术语):

哦,首先,如果用户在多个选项卡/计算机/设备中打开了窗口,则可以有多个userID / Session相同,因此需要将其发送到具有相同userID的每个套接字

socket.on('chatMessage', function (message, userID) {  

for each (users[*].userID==userID)
{
    users[*][userID].emit('chatMessageResponse', { data: message});
}
});

所以我不知道如何忽略socket.id(我在哪里放置[*]

3 个答案:

答案 0 :(得分:1)

更改为:

users[socket.id] = {userID:session, socketID:socket};

然后:

for (var key in users)
{
if (users[key].userID==userID)
{

users[key].socketID.emit('new_request_response', { data: message});
}
}

答案 1 :(得分:0)

我认为您可能需要for in循环,条件为if

socket.on('chatMessage', function (message, userID) {
    for (var key in users)
        if (users[key].userId==userId)
            users[key][userId].emit('chatMessageResponse', { data: message});
});

答案 2 :(得分:0)

这是我的代码。

var io = require('socket.io').listen(15630);
var clients = [];
var coupling = [];

io.sockets.on('connection', function (socket) {

clients[socket.id] = socket;
socket.on('setUserID', function (userID) {

    socket.set('userID', userID, function () {
        coupling[userID] = socket.id;
    });

});


for (var client in io.sockets.clients()) {

        console.log(client);

}

socket.on('send', function (from,to,message)
{

    var sender = 0;
    socket.get('userID', function (err, name) {
        sender = name;
    });
    var userSocket = clients[coupling[to]];
    if(userSocket != null || userSocket != undefined)
    userSocket.emit('message', {from :from,to : to,message:message});
});
socket.on('disconnect', function () {

    var sender = 0;
    socket.get('userID', function (err, name) {
        sender = name;
    });
    delete clients[coupling[sender]]
    //var userSocket = clients[coupling[sender]];
    //if(userSocket != null || userSocket != undefined)
    //clients[coupling[sender]] = null;
});

});