想象一个 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 ...
}