我正尝试在Redis中将消息广播到频道,但是每个用户都使用各自的user_id拥有自己的频道。
我认为可以使用的方式是获取所有活动频道,然后逐一发布。因为如果通道不同,我知道Redis无法发布。
但是问题是,在lib go-redis
中,我正在使用当用户从属并使用命令PUBSUB CAHNNELS
检查redis时,没有通道结果。我在文档中阅读了subribe函数,不会立即激活该通道。那么我如何获得子频道呢?
是否有解决方案?
我正在使用golang-redis
https://godoc.org/github.com/go-redis/redis
答案 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
}