Использование AMQP и Node.JS для синхронизации данных в реальном времени - PullRequest
2 голосов
/ 17 ноября 2010

Я создаю веб-приложение для повышения производительности, которое имеет дело с умеренным параллелизмом пользователей, и я изучаю различные варианты синхронизации данных между сервером и клиентом.Данные приложения загружаются в JavaScript при загрузке страницы, а веб-сокеты используются для передачи данных на сервер.

Для некоторого контекста в настоящее время я использую Node.JS и Socket.IO для создания постоянного клиента-серверный шлюз, который действует как прокси для бэкэнда Django.

Проблема в том, что я хотел бы синхронизировать все подключенные клиенты друг с другом, чтобы любые изменения в приложении в одном сеансе клиента происходили немедленноотражается на всех подключенных клиентских сессиях.Сложность в том, что не всем пользователям обязательно разрешено просматривать все данные;Существуют различные уровни пользователей, и разные пользователи могут стать владельцами немного разных наборов данных.

Следовательно, когда объект каким-либо образом изменяется и это изменение передается в базу данных, мне нужно знать, какиепользователи из тех, кто в данный момент подключен, я могу смело отправлять данные.

Я изучал различные решения для этого, и я чувствую, что это то, что может быть обработано через очередь обмена сообщениями pubsub - используя что-то вроде AMQP, но я изо всех сил пытаюсь выяснить структуру приложения.

В моей голове структура приложения выглядит так:

Client <-> Node.JS gateway <--> AMQP messaging queue <-> Django app

Должен ли я просто создать один прямой обмен, обрабатывая экземпляры Node.js и Django как отдельные клиенты, а затем каким-то образом фильтровать результаты в Node.js?

Или это своего рода фильтрация, которую может обрабатывать система обмена сообщениями, когда каждый подключенный клиент подписывается на релевантныйНапример, и получение только тех данных, которые им разрешено видеть?

У меня очень мало опыта работы с системами обмена сообщениями, поэтому я пытаюсь понять, какую роль они выполняют.способны в приложении.Любой совет будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 декабря 2010

Я думаю, каждому клиенту будет намного проще подписаться на соответствующую очередь и просто использовать узел в качестве тупого шлюза.Как правило, это хорошая идея - максимально снизить уровень безопасности.Также я думаю, что это облегчит обработку, если клиент ненадолго уйдет в автономный режим, так как вы можете оставить вещи в их очереди и отправить их позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...