我希望有2个节点服务器'A'和'B'的实例。
'A'将在房间中推送已连接的客户端[socket.io]。
'A'将发布已经订阅'B'的事件。
在从'A'接收到该特定事件时,实例'B'将在给定房间中广播消息。想要使用socket.io的Room功能
想问一下,有可能吗? 我正在尝试redis商店,但没有得到如何发布一个事件,以便服务器'B'将接收它。
答案 0 :(得分:1)
你可以运行2个redis实例,一个在服务器A上,一个在服务器B上。
如果你将A上的地址绑定到*或127.0.0.1,B的IP,你可以要求服务器B成为A的奴隶:slaveof <A ip adress> 6379
A发布的每个发布都将复制到B,因此您可以将B服务器收听到频道并将您想要的内容推送到会议室
有关您的信息,您可以启动服务器进行测试,如下所示: 在A:
redis-server --port 6391 --bind (B-IP) --bind 127.0.0.1
在B:
redis-server --port 6392 --slaveof (A-IP) 6391
我没有对此解决方案进行全面测试(仅在本地主机上测试了两次服务器),但这应该可行
如果您想要处理某些键,可以使用psubscribe和一些“键”作为通道名称。我之前做过这样的事情:
在A
上publish "|key1=toto||key2=titi||key3=plop|" "nanana"
在B
PSUBSCRIBE "*|key2=titi|*"
当您在密钥上看到分隔符时,您将只有过滤推送
你可以在你的node / socketIo中做类似的事情: 在A
var redis = require("redis");
client = redis.createClient();
client.publish("room::"+roomID, message);
在B
var redis = require("redis");
client = redis.createClient();
client.on("pmessage", function (pattern,channel, message){
//emit on roomid(in channel) the message
}
client.psubscribe("room::*");
未经测试......