redis - Redis 和 Faye 中的分层 Pub/Sub 和推送通知

标签 redis publish-subscribe faye

我一直在为我正在构建的系统使用 Redis 和 Faye。我仍然不确定它们是否是我特定应用的最佳选择。

我的目标

每个用户都可以向 channel /主题发布消息,并从他订阅的主题接收消息。主题必须具有层次结构(即主题“B”是主题“A”的子主题,因此主题之间存在“A->B”关系)。如果用户订阅了一个子主题,他只会收到来自该主题的消息(他订阅了“A->B”中的“B”,并且只会收到“B”中的消息)。如果用户订阅主主题,他会收到子主题的所有消息(他订阅了“A”并收到“B”和“A”的其他子主题的消息)。

用户应该使用推送通知 (Android/Apple) 在他们的移动设备上接收通知。

我尝试做什么

我试图通过向层次结构的所有 channel 发布消息来模拟层次结构。假设我们有这样的层次结构:“A->B->C”“A->B->D”,因此 B 有两个子主题。

发布到 C 意味着发布者将消息发送到 channel “A”、“B”和“C”。 发布到 D 意味着,对于发布者来说,将消息发送到 channel “A”、“B”和“D”。

问题

使用由 Redis 支持的 Faye 或仅使用 Redis 是否有更好的方法来做到这一点? 如果这是最好的方法,它如何随着发布者/订阅者和主题数量的增加而扩展? 如何通过移动推送API实现流更新?

最佳答案

你应该考虑 redis 中的 PSUBSCRIBE 命令。

使用 PSUBSCRIBE 客户端订阅模式而不是单个 key 。

您可以轻松地在键命名中对层次结构进行编码(假设您有主题:A:B:C),当客户端订阅主题:A:* 时,它将收到发布在主题:A:B 和主题: A:B:C

关于redis - Redis 和 Faye 中的分层 Pub/Sub 和推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130128/

相关文章:

mongodb - MongoDB 应该使用 Memcache 还是 Redis 进行缓存?

java - 哪种 NoSQL 实现最合适?

python-3.x - 谷歌云pubsub python同步拉取

SwiftUI:发布自定义形状的更新

ruby-on-rails - 在没有 Thin gem 的情况下启动瘦服务器不起作用

php - php中使用curl与faye发布数据

redis - django-celery celerybeat 周期性任务每 5 秒运行一次,与间隔无关

ruby redis 客户端扫描与 key

sockets - ZeroMQ REP套接字中的主题

ruby - 如何使用 Faye Websockets 向特定客户端发送消息?