【发布时间】:2013-04-10 21:09:17
【问题描述】:
想象一个 Web 套接字服务器。当我收到一个连接时,我需要将该连接保存在它所属的池中(将池视为“对等点”的“房间”)。这是必需的,因为我需要向同一个池的对等方广播内容。
当然,代码都是异步的,即使 Node 是单线程的,维护全局数组似乎也不可靠(不过我不确定这怎么可能……):在压力期间测试,消息流向服务器的速度非常快,我将连接保存在结构中,但通常下一条消息没有发现该结构(仍然?)更新,行为不正常。
应用使用Redis,但是socket不能序列化...
通信基于 WebSockets,通过 SockJS(我在之前的迭代中使用了 Socket.io)。
我确信这是一个众所周知且已经解决的问题,但我仍然没有看到亮光:我在这里缺少什么?
我的 Sessions 对象或多或少是这样的(不仅仅是伪代码......它比那复杂得多)。
var Sessions = {
sockets: {},
add: function(poolId, socket) {
sockets[poolId].push(socket);
},
find: function(poolId) {
return sockets[poolId];
},
remove: function ...
}
【问题讨论】:
标签: javascript node.js sockets concurrency