Ответ 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.
Я надеюсь, что это было полезно.