[英]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.