Faye vs. Socket.IO (і Juggernaut)


102

Socket.IO, здається, є найпопулярнішою та найактивнішою бібліотекою емуляції WebSocket. Juggernaut використовує його для створення повноцінної паб / підсистеми.

Faye також популярний і активний, має власну бібліотеку javascript, що робить його повну функціональність порівнянною з Juggernaut. Juggernaut використовує вузол для свого сервера, а Faye може використовувати або вузол, або стійку. Juggernaut використовує Redis для постійності ( виправлення: він використовує Redis для pub / sub), а Faye лише зберігає стан у пам'яті.

  1. Чи все вище точно?
  2. Фей каже, що реалізує Bayeux - я думаю, що Juggernaut цього не робить - це тому, що Juggernaut нижчого рівня (IE, я можу реалізувати Bayeux за допомогою Juggernaut)
  3. Чи міг Фей перейти до використання бібліотеки JavaScript JavaScript браузера Socket.IO? Або їх бібліотеки javascript роблять принципово різні речі?
  4. Чи є якісь інші архітектурні / дизайнерські / філософічні відмінності між проектами?

3
Про всяк випадок, "Юггернаут" був застарілим! Прочитайте, чому blog.alexmaccaw.com/killing-a-library .
Мазіяр

HTML 5 Події, надіслані сервером, начебто є рекомендованою альтернативою за словами автора "
Джуггернаута"

Відповіді:


121

Розкриття: Я є автором Faye.

  1. Щодо Фей, все, що ви сказали, є правдою.
  2. Faye реалізує більшість Bayeux, єдине, чого зараз бракує, - це сервісні канали, в яких я ще не переконаний у своїй корисності. Зокрема, Faye розроблений таким чином, щоб бути сумісним із еталонною реалізацією CometD Bayeux, яка має велике значення щодо наступного.
  3. Концептуально, так: Фей міг би використовувати Socket.IO. На практиці є певні бар'єри для цього:
    • Я не маю уявлення про те, яку потребує серверна підтримка Socket.IO, і вимога, щоб клієнт Faye (є клієнти на стороні сервера в Node і Ruby, пам’ятайте) міг спілкуватися з будь-яким сервером Bayeux (і Faye сервер для будь-якого клієнта Bayeux) може бути автоматичним.
    • Bayeux має специфічні вимоги до того, що сервери та клієнти підтримують певні типи транспорту, і розповідає, як домовитись, який з них використовувати. Він також визначає, як вони використовуються, наприклад, як тип вмісту запиту XHR впливає на інтерпретацію його вмісту.
    • Для деяких типів обробки помилок мені потрібен прямий доступ до транспорту, наприклад, повторне повідомлення, коли клієнт знову підключається після того, як Node WebSocket помирає .
    • Виправте мене, якщо я щось помиляюсь - це засновано на помірному скануванні документації на Socket.IO.
  4. Faye - це просто паб / суб, він заснований на дещо складнішому протоколі та має багато вподобань:
    • Розширення на стороні сервера та клієнта
    • Підстановлення шаблонів підстановок на маршрутах каналів
    • Автоматичне підключення, наприклад, коли WebSockets помирає або сервер переходить в офлайн-режим
    • Клієнт працює у всіх браузерах, на телефонах, а на сервері - у Node та Ruby

Faye, мабуть, виглядає набагато складніше порівняно з Juggernaut, тому що Juggernaut делегує більше, наприклад, він делегує переговори про транспортування до Socket.IO та маршрутизацію повідомлень до Redis. Це обидва прекрасні рішення, але моє рішення використовувати Bayeux означає, що я повинен більше працювати.

Що стосується філософії дизайну, головна мета Faye полягає в тому, щоб вона працювала всюди, де є Інтернет, і це має бути абсолютно тривіально, щоб почати працювати. Початок роботи дуже просто, але його розширюваність означає, що його можна налаштувати досить потужними способами, наприклад, ви можете перетворити його на послугу push-сервер-клієнт (тобто зупиняйте довільних клієнтів, що підштовхують до нього), додаючи розширення аутентифікації .

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

Я сподіваюся, що це було корисно.


1
Дякую за чудову відповідь. Я не усвідомлював гнучкість протоколу Bayeux - так що довільний клієнт повинен мати можливість спілкуватися з довільними / декількома серверами? Чи знаєте ви про якісь проекти чи виробничі послуги, які повністю цим користуються?
Джон Бачір

4
Нещодавно я переїхав із Socket.IO в Faye, і мушу сказати, що Faye врятував мою заявку. За допомогою простого сервера Faye та середнього сервера моє додаток може одночасно обробляти 6000 користувачів відповідно до google analytics
Tan Nguyen

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

Мені буде дуже цікаво, що має сказати автор Фей. Як я кажу, я не користувався цим, і було б чудово знати, як він порівнюється з "Джуггерно". Можливо, це стосується використання найкращого інструменту для роботи. Якщо вам потрібна пабса, Juggernaut робить це дуже добре.


Дякую за чудову відповідь. Я не усвідомлював, що Redis використовується лише для своїх функцій pub / sub. Змусив мене запитати: stackoverflow.com/questions/4938520
Джон Бачір

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.