Подтвердить что ты не робот

Фей против Socket.IO(и Джаггернаут)

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

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

  • Является ли все более точным?
  • Фэй говорит, что он реализует Bayeux - я думаю, что Джаггернаут не делает этого - это потому, что Джаггернаут - более низкий уровень (IE, Я могу реализовать Bayeux с помощью Juggernaut)
  • Может ли Faye переключиться на использование библиотеки javascript браузера Socket.IO, если бы захотелось? Или их библиотеки javascript имеют принципиально разные вещи?
  • Существуют ли другие проекты в области архитектуры/дизайна/философии между проектами?
4b9b3361

Ответ 1

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

  • Что касается Faye, все, что вы сказали, верно.
  • Faye реализует большую часть Bayeux, единственное, чего сейчас нет, это каналы обслуживания, которые я еще не убежден в полезности. В частности, Faye спроектирован так, чтобы быть совместимым с эталонной реализацией CometD Bayeux, которая имеет большое значение для следующего.
  • Концептуально, да: Faye может использовать Socket.IO. На практике есть некоторые препятствия для этого:
    • Я понятия не имею, какая поддержка на серверной стороне Socket.IO требует, и требование, чтобы клиент Faye (есть серверные клиенты в Node и Ruby, помните) мог поговорить с любым Bayeux сервер (и сервер Faye любому клиенту Bayeux) может быть разблокированным.
    • В Bayeux есть особые требования к тому, что серверы и клиенты поддерживают определенные типы транспорта и говорят, как вести переговоры о том, какой из них использовать. Он также указывает, как они используются, например, как Content-Type XHR-запроса влияет на то, как его контент интерпретируется.
    • Для некоторых типов обработки ошибок мне нужен прямой доступ к транспорту, например пересылка сообщений при повторном подключении клиента после Node MSSocket dies.
    • Пожалуйста, исправьте меня, если у меня получится что-то не так - это основано на беглом просмотре документации Socket.IO.
  • Faye - это просто pub/sub, это просто основано на немного более сложном протоколе и имеет много тонкостей, встроенных в:
    • Расширения на сервере и на стороне клиента
    • Совпадение шаблонов шаблонов на маршрутах канала
    • Автоматическое повторное соединение, например. когда WebSockets умирает или сервер выходит в автономный режим
    • Клиент работает во всех браузерах, на телефонах и на стороне сервера на Node и Ruby

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

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

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

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

Ответ 2

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

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