Session Socket.io和会话数据

Session Socket.io和会话数据,session,node.js,socket.io,Session,Node.js,Socket.io,这是存储我的临时应用程序数据的合适方式吗 socket.on('connection', function(client){ client.myappsdata = { a: true, b: false } } 我喜欢稍微重一点的 伪代码: // ClientManager.js var Manager = new function() { this._clients = []; this.set = function(client, data)

这是存储我的临时应用程序数据的合适方式吗

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

我喜欢稍微重一点的

伪代码:

// 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, {
       /* ... */ 
    });
}

基本上,每个客户端都有一个
sessionId
,所以将它们的数据存储在由该sessionId键入的散列中

有什么理由不按我的方式执行吗?@Thomas上述方法更具可扩展性。此外,我还必须搜索整个socket.io代码,以确保
客户机
对象到处传递。我所知道的是,
sessionId
可以安全地使用密钥/散列连接到客户端。因此,将数据存储在由sessionId@Raynos对于您的解决方案,您还必须到处传递客户机,因为get和set方法都将客户机对象作为第一个参数,不是吗?也就是说,依我看,这是正常的,也是无法避免的,因为我们必须获得客户机的引用才能获取其数据。@Qlimax我知道这差不多是一年后的事了,但代码并不依赖于客户机实例本身,它从客户机对象获取sessionId属性,并使用它,而不是实际的客户机实例。区别在于socket.io可能不会一直传递相同的客户机实例,而只是使用相同的sessionId创建“socket”对象。Raynos的代码即使在这种情况下也能工作,因为它基于sessionId(字符串)的散列,而不是客户端对象