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(字符串)的散列,而不是客户端对象