2013-04-21 122 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