SocketIO Redis разделяет состояние - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать чат-бэкэнд с помощью 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?

Документация для меняочень непонятно, и приведенные примеры очень сложны для понимания.Это второй день, когда я застрял в этом вопросе и с нетерпением жду каких-то указаний.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...