приложение для чата:pubsubhubbub против xmpp
Вопрос
Я не уверен, какой стек лучше всего подходит для создания приложения для чата.Сейчас я рассматриваю два основных варианта:
- фейсбук торнадо
- минусы:использует не основной протокол чата xmpp, а pubsubhubbub
- плюсы:мне очень нравится его простота разработки (веб-сервер + веб-фреймворк);pubsubhubbub также кажется более простым протоколом, чем xmpp;и я знаю питон
- xmpp + bosch, пенджаб, еджабберд
- минусы:не знаю эрланга;в целом, кажется, немного сложнее разрабатывать
- плюсы:использует протокол xmpp
Приложение чата должно иметь следующее:
- Личные сообщения
- Общественные помещения
- Отдельные комнаты
- История чатов для комнат (не навсегда, только последние n сообщений)
- HTML-встраивание
- ссылка на чат
Оба варианта кажутся масштабируемыми, так что меня это не беспокоит (мы также думаем запустить приложение в ec2 от Amazon).Я знаю, что есть проект по созданию сервера xmpp с использованием Tornado, но он еще не готов к использованию в производстве, а сроки у нас не такие уж большие.По сути, меня больше всего беспокоит простота разработки, а не сожаление о том, что позже я использовал pubsubhubbub для разработки приложения для чата, но я где-то читал, что PubSubHubbub может в конечном итоге заменить XMPP, поскольку REST заменил SOAP — и что вы думаете?
Решение
Перейти на XMPP.
«Из коробки» ejabberd поддерживает все ваши требования.Вам не нужно будет видеть какой-либо эрланг и писать собственные модули для ejabberd.А со Strofejs XMPP в браузере (что вы, видимо, и делаете) великолепен.
Что касается вашего последнего вопроса о замене XMPP pubsubhubbub, не рассчитывайте на это.XMPP существует уже более 10 лет, это надежные реализации с открытым исходным кодом и собственные, совместимые как на клиенте, так и на сервере, и он элегантен, поэтому он не исчезнет.
И вы разрабатываете приложение для чата, для которого и был создан XMPP.
Другие советы
Facebook Tornao вообще не использует PubSubHubbub!
Выбирайте XMPP, он создан для того, что вам нужно.Tornado предназначен не для этого конкретно, а для длинных запросов опроса в целом.
Нет необходимости использовать Punjab, модуль ejabbed http-bind теперь отлично справляется со своей задачей.Кроме того, вам не нужно изучать Erlang, точно так же, как вам не нужно изучать C при написании веб-приложения, использующего Apache :) Посмотрите такие вещи, как Аристошат.Единственное, с чем вам нужно будет поиграться, — это настройка вашего XMPP-сервера и чатов, а затем Javascript для клиентской стороны (в браузере).
Если вам не нужна федерация через XMPP, но вы хотите быстро создать прототип и развернуть его, а также обеспечить масштабируемость, взгляните на пример веб-платформы Lift. чат-сервер на одной странице кода.
PubSubHubbub(PuSH) никогда не предназначался для приложений чата.Его иногда называют «IM для Интернета».Я предлагаю вам просмотреть этот слайд: Realtime Ruby для Интернета в реальном времени от igrigorik
Вопрос на самом деле в том, какой реальный срок вы хотите получить?Если вам нужна скорость, то XMPP — лучший вариант (500 мс), тогда как PuSH зависит от вашего канала и способа его ретрансляции.Помните, что при использовании PuSH требуется в общей сложности 4 сетевых перехода, прежде чем контент достигнет подписчика.
Еще большая проблема заключается в том, что PuSH полагается на HTTP Post.Даже если вы в конечном итоге создадите приложение для чата на основе PuSH и, скажем, на более позднем этапе захотите сделать его доступным для других устройств или даже в качестве настольного приложения, вам придется ретранслировать тот же контент с помощью XMPP.Еще одна вещь, в которой вы проиграете, — это то, что пользователям вашего чат-приложения будет очень сложно войти в систему из любого другого чата по их выбору.
Вы можете использовать REST API с WebSocket для реализации архитектуры издатель/подписчик.
Атмосфера и чванливые розетки это хорошая Java-инфраструктура, которую вы можете подключить к своему Джерси REST API и добиться этого.
В блоге создателя Atmospehre jfarcand есть один пример приложения для чата построенный по этим технологиям.