2013-04-21 91 views
3

我一直在玩Redis和Faye为我正在构建的系统。我仍然不确定它们是否是我特定应用的最佳选择。Redis和Faye中的分级发布/订阅和推送通知

我的目标

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

用户应使用推送通知(Android/Apple)在他们的手机上收到通知。

我试图做

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

发布到C意味着,对于发布者,将消息发送到频道“A”,“B”和“C”。 发布到D意味着,对于发布者,将消息发送到频道“A”,“B”和“D”。

问题

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

回答

4

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

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

当客户端订阅主题时,您可以轻松地对关键字命名中的层次结构进行编码(例如,您拥有主题:A:B:C):A:*它将接收在主题上发布的消息:A:B和主题:答:B:C

+0

谢谢您的意见,这对分层问题有一定的了解。 您是否有任何建议,或可以通过移动推送通知系统向我指出有关每个用户通知的任何文档/指南? 如果用户必须通过推送通知系统从感兴趣的主题中获取消息,那么我想Redis/Faye和最终用户之间必须有另一个层。任何线索? – Dexter 2013-04-21 21:28:17

+1

@Dexter你需要在redis和faye之间建立一个跟踪订阅的层。该层并不仅仅是映射subscription_key - > [user_ids],订阅redis的进程将使用该进程将消息转发给订阅的客户端 – 2013-04-22 08:15:00