使用socketio存储会话和数据

时间:2016-01-26 01:36:39

标签: javascript node.js sockets data-structures socket.io

我需要存储有关我服务器上的连接的信息。 这应该存储4个不同客户端的4个连接。 我的客户发送这样的信息:

 "0#0.0 0.0 766.5#3#0.0#"

在我分配了ID的服务器中,show socket.broadcast.emit('message', map)显示了这个:

message : {"id":"data"}

控制台显示:

message : {"/#DVWkJsrfHFB21XUkAAAC":"0#0.0 0.0 766.5#3#0.0#"}

所有这些都存储在对象图中。 现在我不需要id,只需要数据"0#0.0 0.0 766.5#3#0.0#"

我试图实现这个:

var result = "";
for(var a in map){
 result = result + map[a];
}

但这不行,它获得:

"0#0.0 0.0 766.5#3#0.0#"
"0#0.0 0.0 766.5#3#0.0#0#0.0 0.0 766.5#3#0.0#"
"0#0.0 0.0 766.5#3#0.0#0#0.0 0.0 766.5#3#0.0#0#0.0 0.0 766.5#3#0.0#"

这应显示4个不同客户端的4个连接。这是真正的挑战。如果我有4个连接,我只需要显示一个字符串,在单个对象链中显示4个连接的数据。

这是我想要的数据:

{"data client 1", "data client 2","data client 3","data client 4"}

我如何在服务器中看到,这应该是:

{"0#0.0 0.0 3593.0#3#0.0#", "0#0.0 0.0 3593.0#3#0.0#","0#0.0 0.0 3593.0#3#0.0#","0#0.0 0.0 3593.0#3#0.0#"}

这是我正在使用的代码:

var map = {};
var result = "";
function storeInfo(event, value){
    map[event]= value;
}
io.on('connection', function(socket) {
    var clientPlayer = null;
    socket.on('message', function(data) {
        var sessionid = socket.id;
        if(sessionid in map){
            map[sessionid] = data;
            for(var a in map){
                result = result + map[a];
                // show bucle infinite
            }
            socket.broadcast.emit('message', map);
        } else {
            storeInfo(sessionid, data);
        }
        socket.emit('message', data);
    });
});

1 个答案:

答案 0 :(得分:0)

嗯,在这一夜工作之后,这就是解决方案:

var map = {};
function storeInfo(event, value){
    map[event]= value;
} 
io.on('connection', function(socket) {
        var clientPlayer = null;
        socket.on('message', function(data) {
            var sessionid = socket.id;
            if(sessionid in map){
                map[sessionid] = data;
                var result = [];
                for(var o in map){
                    result.push(map[o]);
                }
                result.join(" ");
                socket.broadcast.emit('message', result);
            } else {
                storeInfo(sessionid, data);
            }
            socket.emit('message', data);
        });
});