Faye vs. Socket.IO (i Juggernaut)

Socket.IO wydaje się być najpopularniejszą i najbardziej aktywną biblioteką emulacji WebSocket. Juggernaut używa go do stworzenia kompletnego systemu pub/sub.

Faye jest również popularna i aktywna, posiada własną bibliotekę javascript, dzięki czemu jego pełna funkcjonalność jest porównywalna do Juggernaut. Juggernaut używa node dla swojego serwera, a Faye może używać node lub rack. Juggernaut używa Redis dla trwałości (korekta: używa Redis dla pub/sub), a Faye zachowuje tylko stan w pamięci.

  1. czy wszystko powyżej jest dokładne?
  2. Bayeux (2007-2010) - amerykański serial animowany z 2007 roku, w którym Serial opowiada o przygodach Juggernauta (2007-2010).]}
  3. Czy Faye przełączy się na korzystanie z Socket.IO przeglądarka javascript biblioteki, jeśli chcesz? A może ich biblioteki javascript robią zasadniczo różne rzeczy?
  4. czy są jakieś inne różnice architektoniczne / projektowe/filozoficzne między projekty?
Author: John Bachir, 2011-02-04

3 answers

ujawnienie: jestem autorem Faye.

    Jeśli chodzi o Faye, wszystko, co powiedziałeś, jest prawdą.
  1. Faye implementuje większość Bayeux, jedyne czego teraz brakuje to kanały serwisowe, których jeszcze nie byłem przekonany o przydatności. W szczególności Faye została zaprojektowana tak, aby była kompatybilna z implementacją referencyjną Cometd Bayeux, która ma duży wpływ na następujące kwestie.
  2. koncepcyjnie tak: Faye mogłaby użyć Socket.IO. w praktyce, tam czy są jakieś bariery w tym:
    • nie mam pojęcia jaki rodzaj wsparcia po stronie serwera Socket.IO wymaga, a wymóg, aby Klient Faye (istnieją klienci po stronie serwera w Node i Ruby, pamiętaj) mógł rozmawiać z dowolnym serwerem Bayeux (a serwer Faye z dowolnym klientem Bayeux) może być łamaniem umowy.
    • Bayeux ma specyficzne wymagania, że serwery i klienci obsługują określone rodzaje transportu i mówi, jak negocjować, którego z nich użyć. Określa również, w jaki sposób są one wykorzystywane, dla przykład, w jaki sposób Typ zawartości żądania XHR wpływa na interpretację jego treści.
  3. dla niektórych rodzajów obsługi błędów potrzebuję bezpośredniego dostępu do transportu, na przykład ponowne wysyłanie wiadomości, gdy klient ponownie połączy się po śmierci WebSocket węzła.
  4. Proszę mnie poprawić, jeśli coś z tego źle zrozumiałem - jest to oparte na pobieżnym skanie Socket.IO dokumentacja.
  5. Faye jest tylko pub/sub, opiera się na nieco bardziej złożonym protokole i ma dużo ładnych rzeczy wbudowanych:
    • rozszerzenia po stronie serwera i klienta
    • wieloznaczne dopasowanie wzorców na trasach kanału
    • automatyczne ponowne połączenie, np. gdy WebSockets umiera lub serwer przechodzi w tryb offline
    • Klient działa we wszystkich przeglądarkach, na telefonach i po stronie serwera na Node i Ruby

Faye prawdopodobnie wygląda o wiele bardziej skomplikowanie w porównaniu do Juggernaut, ponieważ Juggernaut deleguje więcej, np. deleguje transport do Socket.IO i przesłanie przekierowanie do Redis. To są dobre decyzje, ale moja decyzja o użyciu Bayeux oznacza, że muszę zrobić więcej pracy sam.

Jeśli chodzi o filozofię projektowania, nadrzędnym celem Faye jest to, że powinna ona działać wszędzie tam, gdzie jest dostępna sieć i powinna być absolutnie trywialna. To naprawdę proste, ale jego rozszerzalność oznacza, że można go dostosować w dość wydajny sposób, na przykład można przekształcić go w usługę push serwera do klienta (tj. do niego) poprzez dodanie rozszerzeń uwierzytelniania.

Trwają również prace nad uelastycznieniem go po stronie serwera. Patrzę na dodanie wsparcia dla klastrów i uczynienie core pub-sub engine pluggable, abyś mógł użyć Faye jako bezpaństwowej nakładki internetowej dla innego systemu pub-sub, takiego jak Redis lub AMQP.

Mam nadzieję, że to było pomocne.

 120
Author: jcoglan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 06:25:17
    AFAIK, tak, pomijając fakt, że Juggernaut używa tylko Redis do Pubsub, a nie persistence. Oznacza to również, że biblioteki klienckie w większości języków zostały już napisane (ponieważ potrzebuje tylko adaptera Redis). Juggernaut nie implementuje Bayeux, ale ma bardzo prosty, Niestandardowy protokół JSON.]}
  1. Nie wiem, prawdopodobnie
  2. Juggernaut jest bardzo prosty i tak zaprojektowany. Chociaż nie używałem Faye, z dokumentów wygląda na to, że ma o wiele więcej funkcji niż tylko PubSub. Budowany na szczycie Socket.IO ma też swoje zalety, Juggernaut jest obsługiwany praktycznie w każdej przeglądarce, zarówno stacjonarnej, jak i mobilnej.

Będę bardzo zainteresowany tym, co autor Faye ma do powiedzenia. Jak mówię, nie używałem go i byłoby świetnie wiedzieć, jak to porównuje do Juggernaut. Prawdopodobnie chodzi o użycie najlepszego narzędzia do tego zadania. Jeśli potrzebujesz pubsub, Juggernaut robi to bardzo dobrze.

 13
Author: Alex MacCaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-04 04:26:26

Faye z pewnością mogłaby. Kolejny przykład podobnego projektu na Socket.IO:

Https://github.com/aaronblohowiak/Push-It

 3
Author: Guillermo Rauch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-04 01:54:57