Javascript 在Socket.io服务器中为每个客户端累积消息

Javascript 在Socket.io服务器中为每个客户端累积消息,javascript,node.js,sockets,data-structures,socket.io,Javascript,Node.js,Sockets,Data Structures,Socket.io,我有一台服务器,需要连接4个客户端,但在这一部分有问题,因为只要连接一个客户端,客户端就会在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#" 每个客户端的数组应包含发送到该客

我有一台服务器,需要连接4个客户端,但在这一部分有问题,因为只要连接一个客户端,客户端就会在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#"
每个客户端的数组应包含发送到该客户端的所有消息。不幸的是,每个客户端只收到一条消息,如下所示:

"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);
  });
});

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);
});

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);
});
“0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5给出一个颊先给出一个给出一个颊先给出一个颊先[“0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5#“]之后[“0#0.0 0.0 256.5#3#0.0#0.0#0.0#509.5#3#0.0#0.0#0.0 760.0#3#0.0#”。