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