Фэй против Socket.IO (и Джаггернаут) - PullRequest
102 голосов
/ 04 февраля 2011

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

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

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

Ответы [ 3 ]

121 голосов
/ 04 февраля 2011

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

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

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

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

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

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

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

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

3 голосов
/ 04 февраля 2011

Фэй, конечно, могла.Другой пример подобного проекта поверх Socket.IO:

https://github.com/aaronblohowiak/Push-It

...