在Socket.io服务器

时间:2016-01-26 23:44:24

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

我有一台服务器并且需要连接4个客户端并且在这部分有问题,因为只有cas连接一个客户端,客户端会自动停止在smarthphone中。与1位客户合作。

我想将每个客户端的数据存储在一个数组中,并将这些数据显示在这样的字符串中:

"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#"

每个客户端的数组应包含发送到该客户端的所有消息。不幸的是,我每个客户端只收到一条消息,如下所示:

"0#0.0 0.0 3593.0#3#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);
  });
});

1 个答案:

答案 0 :(得分:0)

map对象应该按照您的建议将数据存储在每个套接字ID的数组中。您可以使用以下格式定义storeInfo函数:

function storeInfo(event, value){
    if(map[event]) {
      map[event].push(value);
    } else {
      // Initialize the value of each key as an array.
      map[event] = [];
      map[event].push(value);
    }
}

然后您可以这样使用它:

socket.on('message', function(data) {
  var sessionid = socket.id;
  storeInfo(sessionid, data);

  var result = [];
  for (var key in map) {
    result.push(map[key].join(' '));
  }
  result.join("\n");
  socket.broadcast.emit('message', result);
  socket.emit('message', data);
});