Новичок приложения в реальном времени - Node.JS + Redis или RabbitMQ -> клиент / сервер как? - PullRequest
14 голосов
/ 29 мая 2011

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

Я создаю крошечное приложение в реальном времени, которое представляет собой асинхронный чат + еще одну забавную функцию.Я свел мой выбор к следующим двум вариантам:

  1. LAMP + RabbitMQ
  2. Node.JS + Redis + Pub-Sub

Я считаю, чтоЯ получаю основы, чтобы начать учиться и строить это.Тем не менее, мои (серьезно n00b) вопросы:

  • Как мне общаться с конечным пользователем -> клиент с / на сервер в обоих из них?Будет ли это простой длинный / бесконечный опрос Javascript?
  • Из двух, которые могут быть более эффективными для построения и управления из одного слайса (при условии 100 - 1000 пользователей)?
  • Должен ли я простособрать все с помощью jQuery в парадигме «старой школы», а затем определить, какой стек может иметь больше смысла?Просто для того, чтобы я мог создать продукт в качестве прототипа и затем «оптимизировать» его.Или писать в одном над другим больше, чем просто оптимизация?(Я так думаю, но лично я не на 100% в этом вопросе)

Надеюсь, это не сумасшедший вопрос, и он не сразу вспыхнет.Хотелось бы получить конструктивные отзывы, люблю это сообщество!

Спасибо.

Ответы [ 3 ]

21 голосов
/ 30 мая 2011

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

Как RabbitMQ, так и решение Redis требуют, чтобы ваши приложения подключались к промежуточному серверу, который обрабатывает передачу данных. Redis больше всего похож на Oracle, потому что его можно использовать просто как постоянную базу данных с сетевым API. Но RabbitMQ немного отличается, потому что MQ Broker не несет ответственности за сохранение данных. Если вы правильно настроите его и будете использовать правильные параметры при публикации сообщения, то RabbitMQ фактически сохранит данные для вас, но вы не сможете получить эти данные, кроме как в рамках обычного процесса очереди сообщений. Другими словами, RabbitMQ предназначен для обмена сообщениями и предлагает только постоянство как способ восстановления после сетевых проблем или сбоев системы.

Я бы предложил использовать RabbitMQ и любые языки программирования, с которыми вы уже знакомы. Поскольку M в LAMP обычно интерпретируется как MySQL, это означает, что вы либо вообще не используете MySQL, либо используете его только для длительного хранения данных, а не для связи в реальном времени.

Сайт RabbitMQ содержит огромное количество документации по созданию приложений с помощью AMQP. Я предлагаю, чтобы после установки RabbitMQ вы прочитали документы для rabbitmqctl, а затем создали vhost для экспериментов. Таким образом, ваши эксперименты легко очистить, не сбрасывая все заново. Я также предлагаю использовать только обмены темами, потому что вы можете эмулировать поведение прямого и разветвленного обмена с использованием подстановочных знаков в routing_key. Помните, вы публикуете сообщения только на биржах и получаете сообщения только из очередей. Обмен отвечает за шаблон, сопоставляющий ключ сообщения routing_key с ключом связывания очереди, чтобы определить, какие очереди должны получить копию сообщения. Стоит изучить всю модель AMQP, даже если вы планируете отправлять сообщения только в одну очередь с тем же именем, что и для routing_key.

Если вы собираете свой клиент в браузере и хотите создать прототип, то вам следует рассмотреть возможность использования XHR сегодня, а затем перейти к чему-то вроде Kamaloka-js, которая является чистой реализацией Javascript для AMQP (AMQ Протокол), который является стандартным протоколом, используемым для связи с брокером сообщений RabbitMQ. Другими словами, создайте его на основе того, что вы знаете сегодня, а затем ускорите его, что-то (AMQP), имеющее долгосрочное будущее в вашем наборе инструментов.

2 голосов
/ 29 мая 2011

Должен ли я просто собрать все с помощью jQuery в парадигме «старой школы», а затем определить, какой стек может иметь больше смысла? Просто для того, чтобы я мог создать продукт в качестве прототипа и затем «оптимизировать» его. Или писать в одном над другим больше, чем просто оптимизация? (Я так чувствую, но лично я не на 100%)

Это обычно называется RAD (быстрая разработка / разработка приложений), и это то, что я бы порекомендовал прямо сейчас. Это позволяет вам создать подтверждение концепции, которую вы можете использовать для дальнейшей работы, чтобы получить то, что вы хотите.

Что касается того, как общаться с клиентами с сервера, и наоборот, вы вообще читали о веб-сокетах?

Учитывая выбор между LAMP или программированием на основе событий, для того, что вы предлагаете, я бы посоветовал вам заняться программированием на основе событий, так что nodejs. Но это только мнение одного человека.

0 голосов
/ 10 февраля 2013

Ну,

LAMP - Apache создает новый процесс для каждого запроса.RabbitMQ может быть полезен со многими функциями. Node.js - использует один процесс для асинхронной обработки всех запросов с помощью зацикливания событий.Таким образом, нет необходимости создавать дополнительные процессы, такие как apache.Для приложения асинхронного чата наилучшим стеком является socket.io + Node.js + redis pub-sup.Я уже реализовал уведомления в режиме реального времени, используя вышеуказанный стек.

...