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