Node.js 在多个节点实例中共享IO对象
我想在两个节点实例之间共享socket.io创建的文件室,这两个节点实例已经在使用redis store,但无法在不同的节点实例上获取io.sockets.in(ROOM_ID).emit(MESSAGE,DATA) 我正在尝试- 实例A—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
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,现在可以在另一个节点实例中访问它们
在进程Bio.sockets.in(“房间名称”).emit(“事件名称”{data:“1”)中
起作用