Я не уверен на лучшем стеке для создавания приложения чата. В настоящее время я думаю о двух основных опциях:
Приложение чата должно будет иметь следующее:
Обе опции кажутся масштабируемыми, таким образом, это не действительно мое беспокойство (мы думаем о запущении приложения в ec2 амазонки также). Я знаю, что существует проект, который создает xmpp сервер с помощью торнадо, но это не готово к производственному использованию, и наш крайний срок не является настолько большим. В основном мое основное беспокойство является простотой разработки по сравнению с так или иначе сожалением о более позднем использовании pubsubhubbub для разработки приложения чата, но я считал где-нибудь, что PubSubHubbub мог бы в конечном счете заменить XMPP, как REST заменил SOAP - поэтому, что Вы думаете?
Перейти на XMPP.
По умолчанию ejabberd поддерживает все ваши требования. Вам не нужно будет видеть какой-либо erlang и писать собственные модули для ejabberd. А со Strophejs отлично подходит XMPP в браузере (что вы, по-видимому, и делаете).
Что касается вашего последнего вопроса о замене XMPP pubsubhubbub, не рассчитывайте на это. XMPP - это более 10 лет, надежная реализация с открытым исходным кодом и проприетарная совместимость как на клиенте, так и на сервере, и элегантная, поэтому никуда не денется.
И вы разрабатываете приложение для чата, для чего и был создан XMPP.
Facebook Tornao вообще не использует PubSubHubbub!
Выберите XMPP, он был разработан для того, что вы ищете. Tornado был разработан не для этого специально, а для длинных запросов на опросы в целом.
Не нужно использовать Punjab, модуль http-bind теперь делает довольно хорошую работу. Кроме того, вам не нужно изучать Erlang, так же, как вам не нужно изучать C при написании веб-приложения, использующего Apache :) Посмотрите такие вещи, как Aristochat. Единственное, с чем вам нужно будет поиграть, это конфигурация вашего XMPP-сервера и чатов, а затем Javascript для клиентской стороны (в браузере).
PubSubHubbub (PuSH) изначально никогда не предназначался для приложений чата. Иногда его называют «IM для Интернета». Я бы посоветовал вам просмотреть этот слайд: Ruby реального времени для Интернета в реальном времени, автор igrigorik
Вопрос в том, какое время вы хотите получить в реальном времени? Если вам нужна скорость, тогда XMPP - лучший вариант (500 мс), в то время как PuSH зависит от вашего канала и от того, как он ретранслируется. Помните, что с PuSH требуется всего 4 сетевых перехода, прежде чем контент достигнет подписчика.
Еще большая проблема заключается в том, что PuSH полагается на HTTP Post. Даже если вы в конечном итоге создадите приложение для чата на основе PuSH и скажете, что на более позднем этапе вы хотите сделать его доступным для других устройств или даже в качестве настольного приложения, вам придется ретранслировать тот же контент с помощью XMPP. Другое место, где вы будете проигрывать, - это то, что пользователям вашего чат-приложения будет очень сложно войти в систему из любого другого IM по своему выбору.
Если вам не нужна федерация через XMPP, но вы хотите быстро создать прототип и развернуть его наряду с масштабируемостью из коробки, посмотрите на пример сервера чата на одной странице кода веб-фреймворка Lift.