2011-02-04 5 views
98

Socket.IO, кажется, самая популярная и активная библиотека эмуляции WebSocket. Juggernaut использует его для создания полной паб/подсистемы.Faye vs. Socket.IO (и Juggernaut)

Faye также популярен и активен и имеет собственную библиотеку javascript, что делает его полную функциональность сопоставимой с Juggernaut. Juggernaut использует узел для своего сервера, а Faye может использовать либо узел, либо стойку. Джаггернаут использует Redis для настойчивости (коррекция: использует Redis для pub/sub), и Faye сохраняет состояние только в памяти.

  1. Все ли над точным?
  2. Фей говорит, что реализует Bayeux - я думаю, что Джаггернаут не делает этого - это то, что из-за Джаггернаут ниже уровень (IE, можно реализовать с помощью Байе Джаггернаут)
  3. Могли Фей переключиться на использование браузера Socket.io Javascript библиотеку, если она захочет? Или их библиотеки javascript имеют принципиально разные вещи?
  4. Существуют ли другие архитектурные/дизайнерские/философские различия между проектами?
+3

На всякий случай, Джаггернаут устарел! Читайте, почему http://blog.alexmaccaw.com/killing-a-library. – Maziyar

+0

HTML 5 Событие, отправленное сервером, похоже, является рекомендуемой альтернативой в соответствии с автором Juggernaut. – Harindaka

ответ

117

Раскрытие информации: Я являюсь автором Faye.

  1. Что касается Фэй, все, что вы сказали, верно.
  2. Faye реализует большую часть Bayeux, единственное, чего не хватает прямо сейчас, это каналы обслуживания, которые я еще не убежден в полезности. В частности, Faye разработан для совместимости с эталонной реализацией CometD Bayeux, которая имеет большое значение для следующего.
  3. Концептуально, да: Faye можно использовать Socket.IO. На практике есть некоторые препятствия для этого:
    • Я понятия не имею, какая поддержка на стороне сервера Socket.IO требует, и требование, чтобы клиент Faye (есть серверные клиенты в узле и Ruby, помните) мог разговаривать с любым сервером Bayeux (и сервером Faye любому клиенту Bayeux), может быть разблокирован.
    • У Bayeux есть особые требования к тому, что серверы и клиенты поддерживают определенные типы транспорта и говорят, как вести переговоры о том, какой из них использовать. Он также указывает, как они используются, например, как Content-Type XHR-запроса влияет на то, как его контент интерпретируется.
    • Для некоторых типов обработки ошибок мне нужен прямой доступ к транспорту, например resending messages when a client reconnects after a Node WebSocket dies.
    • Пожалуйста, исправьте меня, если у меня есть что-то неправильное - это основано на поверхностном просмотре документации Socket.IO.
  4. Фей только паб/к югу, он просто основан на несколько более сложный протокол и имеют много тонкостей, построенные в:
    • Сервер- и клиентские расширениях
    • Wildcard соответствия шаблону на маршрутах каналов
    • Автоматическое повторное подключение, например когда WebSockets умирают или сервер переходит в автономный режим
    • Клиент работает во всех браузерах, на телефонах, и на стороне сервера на узле и рубин

Фей, вероятно, выглядит намного более сложным по сравнению с Джаггернаут, потому что Джаггернаут делегатов больше, например он делегирует транспортные переговоры в Socket.IO и маршрутизацию сообщений в Redis. Это прекрасные решения, но мое решение использовать Bayeux означает, что мне нужно больше работать самостоятельно.

Что касается философии дизайна, то главной задачей Faye является то, что она должна работать повсюду в Интернете, и она должна быть абсолютно тривиальной, чтобы идти. Мне очень легко начать работу, но его расширяемость означает, что он может быть настроен довольно мощными способами, например, вы можете превратить его в службу push-client от сервера к клиенту (то есть остановить произвольные клиенты, нажав на нее), добавив расширения для аутентификации ,

Существует также работа, которая делает ее более гибкой на стороне сервера. Я смотрю на добавление поддержки кластеризации и делает основной модуль sub-sub подключаемым, чтобы вы могли использовать Faye в качестве автономного веб-интерфейса для другой паб-подсистемы, такой как Redis или AMQP.

Надеюсь, это было полезно.

+1

Спасибо за отличный ответ. Я не осознавал гибкость протокола Bayeux - поэтому произвольный клиент должен иметь возможность разговаривать с произвольными/несколькими серверами? Знаете ли вы о каких-либо проектах или производственных услугах, которые полностью используют это? –

+4

Недавно я перешел из Socket.IO в Faye, и я должен сказать, что Faye сохранила мое приложение. С простым сервером Faye и средним сервером мое приложение может обрабатывать 6000 пользователей одновременно в соответствии с аналитикой google –

13
  1. AFAIK, да, кроме того, Джаггернаут использует только Redis для PubSub, а не настойчивости. Также означает, что клиентские библиотеки на большинстве языков уже написаны (поскольку для этого нужен только адаптер Redis).
  2. Джаггернаут не реализует Байе, а имеет очень простой пользовательский протокол JSON
  3. Незнайка, вероятно
  4. Juggernaut очень прост, и разработан, чтобы быть. Хотя я не использовал Faye, из документов это выглядит так, что у него гораздо больше возможностей, чем у PubSub. Кроме того, Juggernaut поддерживается практически в каждом браузере, как на рабочем столе, так и на мобильных устройствах.

Мне будет действительно интересно, что скажет автор Фей. Как я уже сказал, я не использовал его, и было бы здорово узнать, как он сравнивается с Джаггернаутом. Вероятно, это вариант использования лучшего инструмента для работы. Если вам нужен pubsub, Juggernaut делает это очень хорошо.

+0

Спасибо за отличный ответ. Я не понимал, что Redis использовался только для своих функций pub/sub. Сделал меня спросить это: http://stackoverflow.com/questions/4938520 –