Есть ли способ для трансляции на каждый канал в Redis? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь передать сообщение на канал в redis, но у каждого пользователя есть свой канал со своим user_id.

способ, которым я могу воспользоваться, это получить все активные каналы и затем опубликовать их один за другим. потому что я знаю, что Redis не может публиковать, если другой канал.

но проблема в том, что в lib go-redis я использую, когда пользователь подписывается и проверяет redis с помощью команды PUBSUB CAHNNELS, нет результата канала. Я прочитал в документации, что функция подписки не активирует канал. так как я могу получить канал подписки?

есть ли решение, чтобы решить эту проблему? я использую golang-redis https://godoc.org/github.com/go-redis/redis

1 Ответ

0 голосов
/ 11 мая 2019

Подписаться на каждое соединение для каждого канала пользователя и канала для трансляций. Чтобы отправить всем пользователям, опубликуйте на канале вещания. Код подписчика будет выглядеть примерно так с клиентом go-redis:

sub := client.Subscribe(userChannel, broadcastChannel)
defer sub.Close()
for {
   m, err := sub.ReceiveMessage()
   ... do something with m
}

где userChannel и broadcastChannel - это названия каналов Redis. Используйте такой код для трансляции:

cmd := client.Publish(broadcastChannel, message)
if cmd.Err() != nil {
    // handle error
}
...