我正在尝试使用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集群?
给我的文档非常不清楚,给出的示例也很难理解。这是我在这个问题上遇到的第二天,期待获得一些指导。谢谢!