web-dev-qa-db-fra.com

RabbitMQ vs Socket.io?

Je fais du développement d'applications Web en direct en temps réel.

Les utilisateurs du navigateur doivent pouvoir communiquer entre eux via un serveur node.js. L'un des utilisateurs écrit un message et tous les autres utilisateurs l'obtiendront.

Je ne comprends pas très bien comment fonctionne RabbitMQ. Mais d'une lecture rapide, il semble qu'il gère la publication/abonnement des messages.

Un utilisateur (dans un navigateur) publie quelque chose et les abonnés (dans d'autres navigateurs) reçoivent ce message. N'est-ce pas ce que fait Socket.io avec les websockets?

Voici mes questions:

  1. Quels sont les avantages/inconvénients pour chacun d'eux?
  2. Socket.io peut-il remplacer RabbitMQ?
  3. Existe-t-il des scénarios pour lesquels j'ai besoin de RabbitMQ pour les applications Web où Socket.io ne suffit pas?
58
ajsie

Mettre à jour

Existe-t-il des scénarios pour lesquels j'ai besoin de RabbitMQ pour les applications Web où Socket.io ne suffit pas? Les utilisateurs du navigateur doivent pouvoir communiquer entre eux via un serveur node.js. L'un des utilisateurs écrit un message et tous les autres utilisateurs l'obtiendront.

Lorsque vous n'avez que ces exigences simples, socket.io seul suffira. . Vous n'avez besoin d'un message file d'attente que lorsque vous souhaitez traiter vos travaux (lourds) hors ligne et de manière contrôlée.

http://en.wikipedia.org/wiki/Message_queue :

Les files d'attente de messages fournissent un protocole de communication asynchrone, ce qui signifie que l'expéditeur et le destinataire du message n'ont pas besoin d'interagir avec la file d'attente de messages en même temps.

Cette phrase doit pénétrer. Le producteur (un processus) met un travail dans la file d'attente et le consommateur consomme en le prenant dans la file d'attente. Le consommateur, la plupart du temps, sont des processus multiples qui consomment plusieurs travaux simultanément. Les consommateurs sont incapables de se dire mutuellement quels emplois ils consomment.

Cela fait de la file d'attente une structure de données First-In-First-Out (FIFO).

C'est, je pense, une propriété importante de la file d'attente. La propriété First-In-First-Out, bien qu'avec une file d'attente de messages avancée comme beanstalkd, vous pouvez donner des priorités aux travaux.

J'espère que cela a du sens;)


Je fais du développement d'applications Web en direct en temps réel.

Pourriez-vous expliquer un peu mieux afin que nous puissions vous donner une meilleure réponse?

Je ne comprends pas très bien comment fonctionne RabbitMQ. Mais d'une lecture rapide, il semble qu'il gère la publication/abonnement des messages.

Voir la citation sur la file d'attente de messages ci-dessous. Laissez-le couler un moment. Vous pouvez également lire le WIKI sur files d'attente de messages .

Un utilisateur (dans un navigateur) publie quelque chose et les abonnés (dans d'autres navigateurs) reçoivent ce message. N'est-ce pas ce que fait Socket.io avec les websockets?

Socket.io prend en charge de nombreux transports différents (également des websockets) et cela devrait être le cas car les websockets ne sont pas pris en charge par la plupart des navigateurs. Mais par exemple, Google Chrome prend déjà en charge les websockets. Je pense que les websockets sont le transport du futur (mais pas encore!). Lorsque vous regardez Page de support du navigateur de Socket.io vous remarquerez que Socket.io prend en charge tous les principaux navigateurs (certains même anciens). Ce qui est bien, c'est qu'il s'enroule autour d'une API Nice.

Quels sont les avantages/inconvénients pour chacun d'eux?

Vous comparez des pommes à des oranges, alors comparer cela est assez étrange.


RabbitMQ

http://www.rabbitmq.com/tutorials/tutorial-one-python.html :

RabbitMQ est un courtier de messages. L'idée principale est assez simple: il accepte et transfère les messages. Vous pouvez le considérer comme un bureau de poste: lorsque vous envoyez du courrier à la boîte aux lettres, vous êtes presque sûr que M. Postman finira par livrer le courrier à votre destinataire. En utilisant cette métaphore, RabbitMQ est une boîte aux lettres, un bureau de poste et un facteur.

Les avantages

  • C'est une assez bonne file d'attente de messages . Personnellement, j'utiliserais redis ou beanstalkd .

Désavantages:

  • N'est pas vraiment pour les "navigateurs".

Socket.io

http://socket.io/ :

Socket.IO vise à rendre possible les applications en temps réel dans chaque navigateur et appareil mobile, en brouillant les différences entre les différents mécanismes de transport.

Les avantages

  • C'est pour le navigateur

Désavantages

  • Ce n'est pas une file d'attente de messages.

Socket.io peut-il remplacer RabbitMQ?

Non, vous ne pouvez pas parce que ce sont deux choses complètement différentes. Vous comparez des pommes à des oranges. Vous devriez essayer de comprendre les deux descriptions des sites que j'ai cités.

61
Alfred

RabbitMQ est un moyen très flexible de créer des topologies de réseau. Il est mature, pris en charge et provient d'un espace financier (en finance, ils font de la messagerie depuis très longtemps). J'utilise RabbitMQ côté serveur et j'utilise d'autres protocoles pour me connecter à RabbitMQ via une "passerelle".

Dans les coulisses, RabbitMQ est écrit dans un langage fonctionnel ultra concis appelé Erlang. Ce n'est pas un gros problème en soi, mais l'affirmation est que si vous savez ce que vous faites et pouvez le dire en moins de lignes de code, c'est finalement plus fiable et testable.

btw: Erlang est utilisé par Facebook et Twitter pour leurs trucs en coulisses.

Maintenant, RabbitMQ est plus qu'une simple chose de type sockets réseau ... il est basé sur une "livraison garantie". Cette fonctionnalité est importante pour les situations d'entreprise. RabbitMQ, alternativement pourrait être utilisé pour évoluer ... en fait, il y a plus que cela ... Je ne lui rends pas justice.

Je ne peux pas commenter node.js car je n'ai pas encore eu l'occasion de jouer avec. Je suis content de RabbitMQ.

re: socket.io (parlons-nous de websockets?) - si c'est pour le navigateur (comme le suggère le post ci-dessus), vous pourriez potentiellement relier cela à RabbitMQ. c'est-à-dire que RabbitMQ est aussi flexible.

5
sgtz

RabbitMQ est utilisé comme moyen de passer des messages entre les applications, pas nécessairement les utilisateurs dans un navigateur. Vous pouvez ensuite implémenter un client RabbitMQ dans node.js, par exemple, qui pousse les messages reçus vers un navigateur.

Voir http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/ pour un exemple.

3
old_sound