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.
- czy wszystko powyżej jest dokładne? Bayeux (2007-2010) - amerykański serial animowany z 2007 roku, w którym Serial opowiada o przygodach Juggernauta (2007-2010).]}
- 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?
- czy są jakieś inne różnice architektoniczne / projektowe/filozoficzne między projekty?
3 answers
ujawnienie: jestem autorem Faye.
-
Jeśli chodzi o Faye, wszystko, co powiedziałeś, jest prawdą.
- 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.
- 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.
- 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.
- Proszę mnie poprawić, jeśli coś z tego źle zrozumiałem - jest to oparte na pobieżnym skanie Socket.IO dokumentacja.
- 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.
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.]}
- Nie wiem, prawdopodobnie 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.
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:
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