Я пытаюсь создать чат-бэкэнд с помощью Express NodeJS, а для сокетов использую socket.io lib.Для отправки сообщения определенному «онлайновому» пользователю я сохраняю массив подключенных пользователей и идентификатор их сокета.
activeUsers.push({userId, socket: socket.id});
(и выделяю массив при событии «отключить»).
Однако проблема возникает, когда у меня более одного экземпляра сервера.
Поэтому я пришел к выводу, что мне нужно использовать 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) Как добраться до хранилища Redis со второго экземпляра сервера, работающего на другом порту (3001)?
2) Как правильно настроить кластер Redis?
Документация для меняочень непонятно, и приведенные примеры очень сложны для понимания.Это второй день, когда я застрял в этом вопросе и с нетерпением жду каких-то указаний.Спасибо!