Фэй против Socket.IO (и Джаггернаут)
Socket.IO, кажется, самая популярная и активная библиотека эмуляции WebSocket. Джаггернаут использует его для создания полной системы паб / подсистема.
Faye также популярен и активен, имеет собственную библиотеку javascript, что делает его полную функциональность сравнимой с Juggernaut. Джаггернаут использует узел для своего сервера, а Фэй может использовать либо узел, либо стойку. Джаггернаут использует Redis для сохранения (исправление: он использует Redis для публикации / подписки), а Фэй только сохраняет состояние в памяти.
- Все ли выше точно?
- Фэй говорит, что он реализует Байе - я думаю, что Джаггернаут этого не делает - потому что Джаггернаут находится на более низком уровне (IE, я могу реализовать Байо, используя Джаггернаут)
- Может ли Фэй перейти на использование библиотеки JavaScript браузера Socket.IO, если захочет? Или их библиотеки javascript делают совершенно разные вещи?
- Есть ли другие архитектурные / дизайнерские / философские различия между проектами?
3 ответа
Раскрытие: я автор Фэй.
- Что касается Фэй, все, что ты сказал, - правда.
- Faye реализует большую часть Bayeux, единственное, чего сейчас не хватает, - это служебных каналов, в которых я еще не убедился в полезности. В частности, Faye спроектирован так, чтобы быть совместимым с эталонной реализацией CometD Байе, которая имеет большое значение для следующего.
- Концептуально, да: Фэй может использовать Socket.IO. На практике существуют некоторые препятствия для этого:
- Я понятия не имею, какая поддержка на стороне сервера требуется Socket.IO, и требование, чтобы клиент Faye (есть серверные клиенты в Node и Ruby, помните) мог общаться с любым сервером Bayeux (и Faye). сервер к любому клиенту Bayeux) может быть нарушителем.
- Bayeux предъявляет особые требования к серверам и клиентам для поддержки определенных типов транспорта и говорит, как договориться о том, какой использовать. Он также указывает, как они используются, например, как Content-Type запроса XHR влияет на интерпретацию его содержимого.
- Для некоторых типов обработки ошибок мне нужен прямой доступ к транспорту, например, повторная отправка сообщений, когда клиент повторно подключается после того, как Node WebSocket умирает.
- Пожалуйста, исправьте меня, если у меня что-то не так - это основано на кратком сканировании документации Socket.IO.
- Faye - это просто pub / sub, он просто основан на немного более сложном протоколе и имеет много встроенных функций:
- Серверные и клиентские расширения
- Подстановочный шаблон сопоставления на маршрутах канала
- Автоматическое переподключение, например, когда WebSockets умирает или сервер отключается
- Клиент работает во всех браузерах, на телефонах и на стороне сервера на Node и Ruby
Faye, вероятно, выглядит намного сложнее, чем Juggernaut, потому что Juggernaut делегирует больше, например, он делегирует согласование транспорта в Socket.IO и маршрутизацию сообщений в Redis. Это оба хорошие решения, но мое решение использовать Bayeux означает, что я должен сделать больше работы сам.
Что касается философии дизайна, главная цель Фэй состоит в том, чтобы она работала везде, где есть Интернет, и должна быть абсолютно тривиальной для начала работы. Начать действительно просто, но его расширяемость означает, что он может быть настроен довольно мощными способами, например, вы можете превратить его в push-сервис сервер-клиент (то есть остановить произвольное нажатие клиентов), добавив расширения аутентификации.,
Также ведутся работы, чтобы сделать его более гибким на стороне сервера. Я смотрю на добавление поддержки кластеризации и на то, чтобы сделать ядро модуля pub-sub подключаемым, чтобы вы могли использовать Faye в качестве веб-интерфейса без сохранения состояния для другой системы pub-sub, такой как Redis или AMQP.
Я надеюсь, что это было полезно.
- AFAIK, да, кроме того факта, что Джаггернаут использует только Redis для Pubsub, а не настойчивость. Также означает, что клиентские библиотеки на большинстве языков уже написаны (так как для этого нужен только адаптер Redis).
- Джаггернаут не реализует Байе, но имеет очень простой пользовательский протокол JSON
- Не знаю, наверное
- Джаггернаут очень прост и разработан таким образом. Хотя я не использовал Faye, из документов видно, что он имеет гораздо больше возможностей, чем просто PubSub. Будучи построенным поверх Socket.IO, он также имеет свои преимущества, Juggernaut поддерживается практически во всех браузерах, как настольных, так и мобильных.
Мне будет действительно интересно, что скажет автор Фэй. Как я уже сказал, я не использовал его, и было бы здорово узнать, как он сравнивается с Джаггернаутом. Вероятно, дело в использовании лучшего инструмента для работы. Если вам нужен паб, Juggernaut делает это очень хорошо.
Фэй, конечно, могла. Еще один пример аналогичного проекта поверх Socket.IO: