Faye contro Socket.IO (e Juggernaut)


102

Socket.IO sembra essere la libreria di emulazione WebSocket più popolare e attiva. Juggernaut lo usa per creare un completo pub / sottosistema.

Faye è anche popolare e attivo e ha una propria libreria javascript, che rende la sua funzionalità completa paragonabile a Juggernaut. Juggernaut utilizza il nodo per il suo server e Faye può utilizzare sia il nodo che il rack. Juggernaut usa Redis per la persistenza ( correzione: usa Redis per pub / sub) e Faye mantiene solo lo stato in memoria.

  1. Tutto sopra è accurato?
  2. Faye dice che implementa Bayeux - penso che Juggernaut non lo faccia - è perché Juggernaut è di livello inferiore (IE, posso implementare Bayeux usando Juggernaut)
  3. Faye potrebbe passare a utilizzare la libreria javascript del browser Socket.IO se lo desidera? O le loro librerie javascript fanno cose fondamentalmente diverse?
  4. Ci sono altre differenze architettoniche / progettuali / filosofiche tra i progetti?

3
Per ogni evenienza, Juggernaut è stato deprecato! Leggi perché blog.alexmaccaw.com/killing-a-library .
Maziyar

Gli eventi HTML 5 inviati dal server sembrano essere l'alternativa consigliata secondo l'autore di Juggernaut
Harindaka

Risposte:


121

Divulgazione: sono l'autore di Faye.

  1. Per quanto riguarda Faye, tutto quello che hai detto è vero.
  2. Faye implementa la maggior parte di Bayeux, l'unica cosa che manca in questo momento sono i canali di servizio, di cui devo ancora essere convinto dell'utilità. In particolare Faye è progettato per essere compatibile con l'implementazione di riferimento CometD di Bayeux, che ha un grande impatto su quanto segue.
  3. Concettualmente sì: Faye potrebbe usare Socket.IO. In pratica, ci sono alcune barriere a questo:
    • Non ho idea del tipo di supporto lato server richiesto da Socket.IO e del requisito che il client Faye (ci sono client lato server in Node e Ruby, ricorda) sia in grado di parlare con qualsiasi server Bayeux (e il Faye server a qualsiasi client Bayeux) può essere un problema.
    • Bayeux ha requisiti specifici che server e client supportino determinati tipi di trasporto e spiega come negoziare quale utilizzare. Specifica anche come vengono utilizzati, ad esempio come il Content-Type di una richiesta XHR influisce sul modo in cui il suo contenuto viene interpretato.
    • Per alcuni tipi di gestione degli errori ho bisogno dell'accesso diretto al trasporto, ad esempio rispedire i messaggi quando un client si riconnette dopo la morte di un Node WebSocket .
    • Per favore correggimi se ho sbagliato qualcosa - questo è basato su una rapida scansione della documentazione di Socket.IO.
  4. Faye è solo pub / sub, si basa solo su un protocollo leggermente più complesso e ha molte sottigliezze integrate:
    • Estensioni lato server e lato client
    • Corrispondenza con caratteri jolly sulle rotte dei canali
    • Riconnessione automatica, ad esempio quando WebSocket muore o il server va offline
    • Il client funziona in tutti i browser, sui telefoni e lato server su Node e Ruby

Faye probabilmente sembra molto più complesso rispetto a Juggernaut perché Juggernaut delega di più, ad esempio delega la negoziazione del trasporto a Socket.IO e l'instradamento dei messaggi a Redis. Queste sono entrambe ottime decisioni, ma la mia decisione di utilizzare Bayeux significa che devo lavorare di più da solo.

Per quanto riguarda la filosofia del design, l'obiettivo principale di Faye è che dovrebbe funzionare ovunque sia disponibile il Web e dovrebbe essere assolutamente banale. È davvero semplice iniziare, ma la sua estensibilità significa che può essere personalizzato in modi piuttosto potenti, ad esempio puoi trasformarlo in un servizio push da server a client (cioè fermare client arbitrari che spingono ad esso) aggiungendo estensioni di autenticazione .

Sono in corso anche lavori per renderlo più flessibile sul lato server. Sto cercando di aggiungere il supporto per il clustering e rendere collegabile il motore pub-sub principale in modo da poter utilizzare Faye come frontend web senza stato per un altro sistema pub-sub come Redis o AMQP.

Spero che questo sia stato utile.


1
Grazie per l'ottima risposta. Non mi rendevo conto della flessibilità del protocollo Bayeux, quindi un client arbitrario dovrebbe essere in grado di parlare con server arbitrari / multipli? Conosci progetti o servizi di produzione che ne traggono pieno vantaggio?
John Bachir

4
Di recente sono passato da Socket.IO a Faye e devo dire che Faye ha salvato la mia applicazione. Con un semplice server Faye e un server medio, la mia applicazione può gestire 6000 utenti contemporaneamente secondo google analytics
Tan Nguyen

13
  1. AFAIK, sì, a parte il fatto che Juggernaut usa Redis solo per Pubsub, non la persistenza. Significa anche che le librerie client nella maggior parte delle lingue sono già state scritte (poiché richiede solo un adattatore Redis).
  2. Juggernaut non implementa Bayeux, ma piuttosto ha un protocollo JSON personalizzato molto semplice
  3. Non lo so, probabilmente
  4. Juggernaut è molto semplice e progettato per essere così. Anche se non ho usato Faye, dai documenti sembra che abbia molte più funzionalità del semplice PubSub. Essendo costruito sopra Socket.IO ha anche dei vantaggi, Juggernaut è supportato praticamente in tutti i browser, sia desktop che mobili.

Mi interesserà molto quello che ha da dire l'autore di Faye. Come ho detto, non l'ho usato e sarebbe bello sapere come si confronta con Juggernaut. Probabilmente è il caso di utilizzare lo strumento migliore per il lavoro. Se hai bisogno di pubsub, Juggernaut lo fa molto bene.


Grazie per l'ottima risposta. Non mi ero reso conto che Redis fosse usato solo per le sue funzioni pub / sub. Mi ha fatto chiedere questo: stackoverflow.com/questions/4938520
John Bachir

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.