2011-06-03 56 views
6

這是存儲我的臨時應用程序數據的合適方式嗎?Socket.io和會話數據

socket.on('connection', function(client){ 
    client.myappsdata = { 
    a: true, 
    b: false 
    } 
} 

回答

9

我更喜歡稍微重一些的東西。

僞代碼:

// ClientManager.js 
var Manager = new function() { 
    this._clients = []; 

    this.set = function(client, data) { 
     this._clients[client.sessionId] = data;  
    }; 

    this.get = function(client) { 
     return this._clients[client.sessionId];    
    } 

}; 

module.exports = function() { 
    return Object.create(Manager); 
}; 

// main.js 
var manager = require("ClientManager")(); 

/* ... */ 

socket.on("connection", function(client) { 
    manager.set(client, { 
     /* ... */ 
    }); 
} 

Bassically每個客戶都有一個sessionId所以他們的數據存儲在由的sessionId

+0

任何理由不這樣做我是怎麼做鍵控的哈希? – Thomas 2011-06-03 19:47:28

+0

@Thomas上述方法更具可擴展性。此外,我將不得不遍歷socket.io代碼來確保「客戶端」對象遍佈各地。我所知道的是'sessionId'可以安全地使用密鑰/哈希來連接到客戶端。因此,將數據存儲在由您的解決方案中的sessionId – Raynos 2011-06-03 19:49:23

+0

@Raynos鍵入的散列中,因爲get和set方法都將客戶端對象作爲第一個參數,所以您必須將所有客戶端都傳遞給所有客戶端,不是嗎?也就是說,國際海事組織是正常的和不可避免的,因爲我們必須得到客戶的參考才能獲取其數據。 – Qlimax 2012-08-28 15:08:16