Node.js 在多个节点实例中共享IO对象

Node.js 在多个节点实例中共享IO对象,node.js,redis,socket.io,Node.js,Redis,Socket.io,我想在两个节点实例之间共享socket.io创建的文件室,这两个节点实例已经在使用redis store,但无法在不同的节点实例上获取io.sockets.in(ROOM_ID).emit(MESSAGE,DATA) 我正在尝试- 实例A— io.set('store',...) io.on('connection',function(socket){ socket.join(''room-ABCD); }); 我可以使用 io.sockets.in('room-ABCD').emit

我想在两个节点实例之间共享socket.io创建的文件室,这两个节点实例已经在使用redis store,但无法在不同的节点实例上获取io.sockets.in(ROOM_ID).emit(MESSAGE,DATA)

我正在尝试- 实例A—

io.set('store',...)

io.on('connection',function(socket){
   socket.join(''room-ABCD);
});
我可以使用

io.sockets.in('room-ABCD').emit('event',{data:{}});
但我需要从实例B执行类似的广播

在实例B上,
io.set('store')
与上面类似,但我无法使用
io.sockets.in('room-ABCD').emit('event',{data:{}})

我的理解是-Redistore将在redis中放置套接字+房间信息,以便其他进程可以访问它。[如果我错了,请更正]。 现在,我不知道如何在节点的其他进程中识别和获取这些信息


谢谢。

如果我能很好地理解你的问题。你的出发点是什么 您可能可以从B访问A(主机不是redis)。因此,在A中,您可以推动您需要在A上发射的:

LPUSH dataToEmit "{'room':'room-ABCD', 'data':'<escapeddata>'}" 
LPUSH dataToEmit“{'room':'room-ABCD','data':''''
在A进程上,您可以对dataToEmit和回调执行BRPOP,您可以取消声音化并发出所需的信息

可能您也可以为一个房间分配一把钥匙。别忘了,你可以用一个特定的数据库号来做这件事


我希望这能帮助您回答与问题-,以及这一个相关的问题

我需要集中注意力的确切点是——加入房间

我使用的是
client\u socket.join(“room\u name”)
,但它会将客户端套接字推送到房间中

现在,尝试
io.sockets.socket(client\u socket.id).join(“room\u name”)

这会将文件室成员推送到redis,现在可以在另一个节点实例中访问它们

在进程B
io.sockets.in(“房间名称”).emit(“事件名称”{data:“1”)中
起作用