go - 有没有办法广播到redis中的每个频道?
问题描述
我正在尝试将消息广播到 redis 中的频道,但每个用户都有自己的频道和他们的 user_id。
我认为可以使用的方式是获取所有活动频道,然后一一发布。因为我知道如果不同的频道,redis 无法发布。
但问题是,在go-redis
我使用的 lib 中,当用户订阅并使用命令检查 redis 时,PUBSUB CAHNNELS
没有通道结果。我在文档上阅读了 subribe 功能不会立即激活频道。那么我怎样才能获得订阅频道?
有什么解决方案可以解决这个问题吗?我正在使用golang-redis
https://godoc.org/github.com/go-redis/redis
解决方案
为每个用户频道和广播频道订阅每个连接。要发送给所有用户,请发布到广播频道。使用 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
}
推荐阅读
- javascript - Cant get firebase to stop overriding old pictures when I upload them in javascript/jquery
- python - 访问python列表循环中的第二个值
- python - 如何以 ~C 速度排空/耗尽异步发电机?
- php - webpack encore symfony4 中的引导程序和 jquery
- uml - 我应该使用 UML 跟踪还是实现
- go - 在一片处理程序中注册一个 http URL 处理程序
- c# - 当 JavaScript 被缩小时,捆绑会产生冲突
- azure-data-explorer - 如何编写 Kusto 查询以在一张表中获取结果?
- angular - 角度应用程序上的多个根模块
- flutter - 刷新按钮的正确实现