有没有办法广播到Redis中的每个频道?

时间:2019-05-11 04:13:38

标签: go redis broadcast

我正尝试在Redis中将消息广播到频道,但是每个用户都使用各自的user_id拥有自己的频道。

我认为可以使用的方式是获取所有活动频道,然后逐一发布。因为如果通道不同,我知道Redis无法发布。

但是问题是,在lib go-redis中,我正在使用当用户从属并使用命令PUBSUB CAHNNELS检查redis时,没有通道结果。我在文档中阅读了subribe函数,不会立即激活该通道。那么我如何获得子频道呢?

是否有解决方案? 我正在使用golang-redis https://godoc.org/github.com/go-redis/redis

1 个答案:

答案 0 :(得分:0)

将每个连接订阅到每个用户频道以及一个广播频道。要发送给所有用户,请发布到广播频道。订户代码在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
}