Иерархический Pub/Sub в Redis и Faye и Push-уведомления

Я играл с Redis и Faye для системы, которую я создаю. Я все еще не уверен, являются ли они лучшим выбором для моего конкретного приложения.

Моя цель

Каждый пользователь может публиковать сообщения в канале/теме и получать сообщения из тем, на которые он подписан. Темы должны иметь иерархическую структуру (т. е. тема «B» является подтемой темы «A», поэтому у нас есть отношения «A-> B» между темами). Если пользователь подписывается на подтему, он просто получает сообщения из этой темы (он подписался на "B" в "A->B" и просто получает сообщения в "B"). Если пользователь подписывается на основную тему, он получает все сообщения из подтем (он подписался на «А» и получает сообщения для «Б» и других подтем «А»).

Пользователи должны получать уведомления на свои мобильные устройства с помощью Push-уведомлений (Android/Apple).

Что я пытался сделать

Я попытался имитировать иерархию, публикуя сообщения во все каналы иерархии. Допустим, у нас есть такая иерархия: "A->B->C" "A->B->D", так что B имеет две подтемы.

Публикация на C означает для издателя отправку сообщений на каналы "A", "B" и "C". Публикация в D означает для издателя отправку сообщений в каналы "A", "B" и "D".

Проблемы

Есть ли лучший способ сделать это, используя Faye при поддержке Redis или просто Redis? Если это лучший подход, как он масштабируется с увеличением числа издателей/подписчиков и тем? Как добиться обновления потока через мобильный push API?


person Dexter    schedule 21.04.2013    source источник


Ответы (1)


Вы должны рассмотреть команду PSUBSCRIBE в Redis.

С PSUBSCRIBE клиенты подписываются на шаблон вместо одного ключа.

Вы можете легко закодировать иерархию в именовании ключей (скажем, у вас есть темы: A: B: C), когда клиент подписывается на темы: A: *, он будет получать сообщения, опубликованные в темах: A: B и темах: A: B :С

person Tommaso Barbugli    schedule 21.04.2013
comment
Спасибо за ваш вклад, который проливает свет на иерархическую проблему. Есть ли у вас какие-либо предложения или вы можете указать мне на какую-либо документацию/руководство по уведомлению каждого пользователя через мобильную систему push-уведомлений? Если пользователь должен получать сообщения из интересующих его тем через систему push-уведомлений, то я предполагаю, что между Redis/Faye и конечным пользователем должен быть еще один слой. Любая подсказка по этому поводу? - person Dexter; 22.04.2013
comment
@Dexter, вам нужен слой между Redis и Faye, который отслеживает подписки. Этот уровень представляет собой не что иное, как сопоставление «ключ_подписки» -> [user_ids], которое процесс, подписывающийся на redis, будет использовать для пересылки сообщений подписанным клиентам. - person Tommaso Barbugli; 22.04.2013