102 votes

Faye contre Socket.IO (et Juggernaut)

Socket.IO semble être la bibliothèque d'émulation WebSocket la plus populaire et la plus active. Juggernaut l'utilise pour créer un système complet de pub/sub.

Faye est également populaire et actif, et possède sa propre bibliothèque javascript, ce qui rend sa fonctionnalité complète comparable à celle de Juggernaut. Juggernaut utilise node pour son serveur, et Faye peut utiliser soit node soit rack. Juggernaut utilise Redis pour la persistance ( correction : il utilise Redis pour le pub/sub), et Faye ne garde l'état qu'en mémoire.

  1. Est-ce que tout ce qui précède est exact ?
  2. Faye dit qu'il met en œuvre Bayeux -- Je pense que Juggernaut ne fait pas cela. Est-ce parce que Juggernaut est d'un niveau inférieur (par exemple, je peux implémenter Bayeux en utilisant Juggernaut) ?
  3. Faye pourrait-il passer à l'utilisation de la bibliothèque javascript du navigateur Socket.IO s'il le souhaitait ? Ou bien leurs bibliothèques javascript font-elles des choses fondamentalement différentes ?
  4. Y a-t-il d'autres différences d'architecture/de conception/de philosophie entre les projets ?

3 votes

Juste au cas où, Juggernaut a été déprécié ! Lire pourquoi blog.alexmaccaw.com/killing-a-library (en anglais) .

0 votes

Les événements HTML 5 Server-Sent semblent être l'alternative recommandée selon l'auteur de Juggernaut

123voto

jcoglan Points 1508

Divulgation : Je suis l'auteur de Faye.

  1. En ce qui concerne Faye, tout ce que vous avez dit est vrai.
  2. Faye implémente la plupart de Bayeux, la seule chose manquante pour le moment étant les canaux de service, dont je n'ai pas encore été convaincu de l'utilité. En particulier, Faye est conçu pour être compatible avec l'implémentation de référence de Bayeux de CometD, ce qui a une grande influence sur ce qui suit.
  3. Conceptuellement, oui : Faye pourrait utiliser Socket.IO. Dans la pratique, il y a quelques obstacles à cela :
    • Je n'ai aucune idée du type de support côté serveur requis par Socket.IO, et l'exigence que le client Faye (il existe des clients côté serveur dans Node et Ruby, rappelez-vous) soit capable de parler à n'importe quel serveur Bayeux (et le serveur Faye à n'importe quel client Bayeux) peut être un obstacle.
    • Bayeux exige spécifiquement que les serveurs et les clients prennent en charge certains types de transport, et indique comment négocier celui à utiliser. Il précise également comment ils sont utilisés, par exemple comment le type de contenu d'une requête XHR affecte l'interprétation de son contenu.
    • Pour certains types de traitement des erreurs, j'ai besoin d'un accès direct au transport, par exemple renvoi des messages lorsqu'un client se reconnecte après la mort d'un nœud WebSocket .
    • Veuillez me corriger si j'ai fait une erreur - ceci est basé sur un examen rapide de la documentation de Socket.IO.
  4. Faye est juste un pub/sub, il est juste basé sur un protocole un peu plus complexe et a beaucoup de fonctionnalités intégrées :
    • Extensions côté serveur et côté client
    • Filtrage par caractères génériques sur les routes de canaux
    • Reconnexion automatique, par exemple lorsque les WebSockets meurent ou que le serveur est hors ligne.
    • Le client fonctionne dans tous les navigateurs, sur les téléphones, et côté serveur sur Node et Ruby.

Faye semble probablement beaucoup plus complexe que Juggernaut parce que Juggernaut délègue davantage, par exemple il délègue la négociation du transport à Socket.IO et le routage des messages à Redis. Ce sont deux bonnes décisions, mais ma décision d'utiliser Bayeux signifie que je dois faire plus de travail moi-même.

En ce qui concerne la philosophie de conception, l'objectif primordial de Faye est de faire en sorte qu'il fonctionne partout où le Web est disponible et qu'il soit absolument trivial à mettre en œuvre. Il est vraiment simple à utiliser, mais son extensibilité signifie qu'il peut être personnalisé de manière assez puissante, par exemple, vous pouvez le transformer en un service de poussée de serveur à client (c'est-à-dire empêcher les clients arbitraires de pousser vers lui) en ajoutant des extensions d'authentification.

Des travaux sont également en cours pour le rendre plus flexible du côté serveur. J'envisage d'ajouter la prise en charge de la mise en grappe et de rendre le moteur central de pub-sub pluggable afin que vous puissiez utiliser Faye en tant que frontal web sans état pour un autre système de pub-sub comme Redis ou AMQP.

J'espère que cela vous a été utile.

1 votes

Merci pour cette excellente réponse. Je n'avais pas réalisé la flexibilité du protocole Bayeux. Un client arbitraire devrait donc pouvoir parler à des serveurs arbitraires ou multiples ? Connaissez-vous des projets ou des services de production qui en tirent pleinement parti ?

4 votes

Je suis récemment passé de Socket.IO à Faye, et je dois dire que Faye a sauvé mon application. Avec un simple serveur Faye et un serveur moyen, mon application peut gérer 6000 utilisateurs simultanément selon google analytics

13voto

Alex MacCaw Points 735
  1. AFAIK, oui, à part le fait que Juggernaut n'utilise Redis que pour Pubsub, pas pour la persistance. Cela signifie également que les bibliothèques clientes ont déjà été écrites dans la plupart des langues (puisqu'il suffit d'un adaptateur Redis).
  2. Juggernaut n'implémente pas Bayeux, mais dispose plutôt d'un protocole JSON personnalisé très simple.
  3. Je ne sais pas, mais probablement
  4. Juggernaut est très simple, et conçu pour être ainsi. Bien que je n'aie pas utilisé Faye, d'après la documentation, il semble qu'il ait beaucoup plus de fonctionnalités que PubSub. Le fait d'être construit au-dessus de Socket.IO a aussi ses avantages, Juggernaut est supporté par pratiquement tous les navigateurs, qu'ils soient de bureau ou mobiles.

Je serai très intéressé par ce que l'auteur de Faye a à dire. Comme je l'ai dit, je ne l'ai pas utilisé et ce serait formidable de savoir comment il se compare à Juggernaut. C'est probablement le cas d'utiliser le meilleur outil pour le travail. Si c'est de pubsub dont vous avez besoin, Juggernaut le fait très bien.

0 votes

Merci pour cette excellente réponse. Je n'avais pas réalisé que Redis n'était utilisé que pour ses fonctionnalités pub/sub. Cela m'a fait poser la question suivante : stackoverflow.com/questions/4938520

3voto

Guillermo Rauch Points 31

Faye le pourrait certainement. Un autre exemple d'un projet similaire sur Socket.IO :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X