Socket.io 和会话数据
Posted
技术标签:
【中文标题】Socket.io 和会话数据【英文标题】:Socket.io and session data 【发布时间】:2011-09-07 23:46:43 【问题描述】:这是存储我的临时应用数据的合适方式吗?
socket.on('connection', function(client)
client.myappsdata =
a: true,
b: false
【问题讨论】:
【参考方案1】:我更喜欢稍微重一点的东西。
伪代码:
// 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 代码,以确保client
对象到处传递。我所知道的是sessionId
可以安全地使用密钥/哈希附加到客户端。因此将数据存储在由 sessionId 键入的哈希中
@Raynos 使用您的解决方案,您还必须在任何地方传递客户端,因为 get 和 set 方法都将客户端对象作为第一个参数,不是吗?也就是说,IMO 是正常且不可避免的,因为我们必须获得客户端的引用才能获取其数据。
@Qlimax 我知道这已经差不多一年了,但是代码不依赖于客户端实例本身,它从客户端对象中获取 sessionId 属性并使用它而不是实际的客户端实例。不同之处在于 socket.io 可能不会一直传递相同的客户端实例,只需创建具有相同 sessionId 的“socket”对象。即使是这种情况,Raynos 的代码也可以工作,因为它基于 sessionId(字符串)的哈希而不是客户端对象以上是关于Socket.io 和会话数据的主要内容,如果未能解决你的问题,请参考以下文章