SocketIO Redis状态共享

时间:2018-10-10 10:23:38

标签: node.js express redis socket.io

我正在尝试使用Express NodeJS构建聊天后端,而对于套接字,则使用socket.io lib。为了向特定的“在线”用户发送消息,我正在存储连接的用户数组及其套接字ID。

activeUsers.push({userId, socket: socket.id});

(并在'disconnect'事件中对数组进行切片)。

但是,当我有多个服务器实例时,就会出现问题。

所以我得出一个结论,我需要使用Redis。所以我已经设置了redis

const server = require('http').createServer(app);
export const io = require('socket.io').listen(server);
const pub = redis.createClient('6379', '127.0.0.1');
const sub = redis.createClient('6379', '127.0.0.1');
io.adapter(redisAdapter({
  pubClient: pub,
  subClient: sub,
}));

使用redis-cli监视器,我可以成功发布到Redis商店中。

1539166286.319444 [0 127.0.0.1:62122] "info"
1539166286.329971 [0 127.0.0.1:62123] "info"
1539166286.339823 [0 127.0.0.1:62123] "psubscribe" "socket.io#/#*"
1539166286.339938 [0 127.0.0.1:62123] "subscribe" "socket.io-request#/#" "socket.io-response#/#"
1539166286.690921 [0 127.0.0.1:62122] "publish" "socket.io#/#" "\x93\xa6YGVdCI\x83\xa4type\x02\xa4data\x92\xb3eventUserConnection\xb85bbb32a9e5c9668a92bab203\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x80"

问题:

1)如何从在不同端口(3001)上运行的第二个服务器实例进入Redis的存储区?

2)如何正确设置Redis集群?

给我的文档非常不清楚,给出的示例也很难理解。这是我在这个问题上遇到的第二天,期待获得一些指导。谢谢!

0 个答案:

没有答案