簡體   English   中英

累積Socket.io服務器中每個客戶端的消息

[英]Accumulate messages for each client in Socket.io server

我有一台服務器,需要連接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);
  });
});

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM