2010-03-18 3 views
7

Я не уверен в лучшем стеке, чтобы создать чат-приложение. В настоящее время я имею в виду два основных варианта:чат-приложение: pubsubhubbub vs xmpp

  • facebook смерч
    • минусы: не использовать основной XMPP протокол чата, но PubSubHubbub
    • плюсы: я на самом деле нравится его простота для развития (веб-сервер + webframework); pubsubhubbub также кажется более простым протоколом, чем xmpp; и я знаю питон
  • XMPP + Босх, Пенджаб, ejabberd
    • минусы: не знаю Erlang; в целом кажется немного сложнее разработать
    • плюсы: использует протокол XMPP

приложение чата необходимо иметь следующее:

  • Приватные сообщения
  • Общественные помещения
  • Частные комнаты
  • История чата для комнат (не навсегда, только последние n сообщений)
  • HTML вложения
  • URL в чат комнату

Оба варианта кажутся масштабируемым, так что это не мое беспокойство (мы думаем о запуске приложения в EC2 Амазонки, а). Я знаю, что есть проект, который создает сервер xmpp с использованием торнадо, но он не готов к использованию в производстве, и наш крайний срок не такой уж большой. В основном мое основное беспокойство - простота разработки, а также некоторое сожаление по поводу использования pubsubhubbub для разработки чат-приложения, но я где-то читал, что PubSubHubbub может в конечном итоге заменить XMPP, поскольку REST заменил SOAP - так что вы думаете?

ОБНОВЛЕНИЕ: знаете ли вы о любом решении с открытым исходным кодом, использующем xmpp, который поддерживает MUC (общедоступный & частный) и PMs?

+0

Примечание. PubSubHubbub (PuSH) даже не близок к тому, что XMPP. PuSH - очень простой протокол публикации-подписки, с чем-то очень похожим на [Dialback] (http://xmpp.org/extensions/xep-0220.html) для аутентификации. XMPP - это гораздо больше, что не помещается в этом поле комментариев. – Zash

ответ

11

Перейти на XMPP.

Из коробки, ejabberd имеет поддержку всех ваших требований. Вам не нужно будет видеть какие-либо erlang и писать пользовательские модули для ejabberd. И с Strophejs, XMPP в браузере (это то, что вы, по-видимому, делаете) отлично.

За последний вопрос о pubsubhubbub, заменяющем XMPP, не рассчитывайте на него. XMPP - более 10 лет, надежный открытый исходный код и проприетарные совместимые реализации как на клиенте, так и на сервере, и он элегантен, поэтому он не исчезнет.

И вы разрабатываете приложение для чата, для которого был создан XMPP.

+0

Strophe выглядит неплохо (используется также Aristochat). Спасибо :) – Sofia

4

Facebook Tornao вообще не использует PubSubHubbub!

Перейти на XMPP, он был разработан для того, что вы ищете. «Торнадо» не был разработан специально для этого, но для длительных запросов на голосование в целом.

Не нужно использовать Пенджаб, ejabbed модуль http-bind делает довольно хорошую работу. Кроме того, вам не нужно изучать Erlang, так же, как вам не нужно изучать C, когда вы пишете webapp, который использует Apache :) Просмотрите материал вроде Aristochat. Единственное, что вам нужно сыграть, это настройка вашего XMPP-сервера и чатов, а затем Javascript для клиентской части (в браузере).

+0

Спасибо. Аристостат выглядит многообещающим. Между тем также нашел Speeqe (http://code.stanziq.com/speeqe). Я проверю их обоих. Согласно этому http://www.readwriteweb.com/archives/where_is_the_real_time_web_message_bus.php, торнадо использует pubsubhubbub. – Sofia

0

PubSubHubbub (PuSH) никогда не предназначался для приложений чата в первую очередь. Его иногда называют «IM для Интернета». Я предлагаю вам пройти этот слайд: Realtime Ruby for the Realtime Web by igrigorik

Вопрос в том, как в реальном времени вы хотите получить? Если вы хотите скорость, то XMPP - лучший вариант (500 мс), в то время как PuSH зависит от вашего фида и того, как его ретранслировать. Помните, что с PuSH в общей сложности 4 сетевых перелета до того, как контент достигнет абонента.

Еще большая проблема - PuSH полагается на HTTP-сообщение. Даже если вы в конечном итоге создаете приложение для чата на основе PuSH и говорите на более позднем этапе, вы хотите сделать его доступным для других устройств или даже в качестве настольного приложения вам придется передавать один и тот же контент с помощью XMPP. Другое место, в которое вы будете проигрывать, - это то, что вашим пользователям чата будет очень сложно входить в систему из любого другого IM по своему выбору.

1

Если вам не нужна федерация через XMPP, но вы хотите прототип и развертывание быстро и масштабируемость из коробки, взгляните на пример веб-фрейма Lift chat server in one page of code.

0

Вы можете использовать API REST с WebSocket для реализации архитектуры Publisher/Subscriber.

Atmosphere и swagger sockets - хорошая инфраструктура java, которую вы можете подключить к своему Jersey REST api и достичь этого.

В блоге создателя Атмосфера, jfarcand, есть один example of chat application, построенный с использованием этих технологий.

 Смежные вопросы

  • Нет связанных вопросов^_^