首页 > 解决方案 > 有没有办法广播到redis中的每个频道?

问题描述

我正在尝试将消息广播到 redis 中的频道,但每个用户都有自己的频道和他们的 user_id。

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

但问题是,在go-redis我使用的 lib 中,当用户订阅并使用命令检查 redis 时,PUBSUB CAHNNELS没有通道结果。我在文档上阅读了 subribe 功能不会立即激活频道。那么我怎样才能获得订阅频道?

有什么解决方案可以解决这个问题吗?我正在使用golang-redis https://godoc.org/github.com/go-redis/redis

标签: goredisbroadcast

解决方案


为每个用户频道和广播频道订阅每个连接。要发送给所有用户,请发布到广播频道。使用 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
}

推荐阅读