Vraag RabbitMQ vs Socket.io?


Ik ben bezig met real-time live webapp-ontwikkeling.

Browsergebruikers moeten met elkaar kunnen communiceren via een node.js-server. Een van de gebruikers schrijft een bericht en alle andere gebruikers krijgen het bericht.

Ik snap niet helemaal hoe RabbitMQ werkt. Maar van snel lezen lijkt het erop dat het de publicatie / aanmelding van berichten behandelt.

Een gebruiker (in een browser) publiceert iets en abonnees (in andere browsers) krijgen dat bericht. Is dat niet wat Socket.io aan het doen is met websockets?

Dit zijn mijn vragen:

  1. Wat zijn de voordelen / nadelen voor elk van hen?
  2. Kan Socket.io RabbitMQ vervangen?
  3. Zijn er scenario's die ik nodig heb RabbitMQ voor web-apps waar Socket.io niet voldoende is?

36
2017-07-09 17:08


oorsprong


antwoorden:


Bijwerken

Zijn er scenario's waarvoor ik RabbitMQ nodig heb?   voor web-apps waar Socket.io dat niet doet   voldoen?   Browsergebruikers moeten met elkaar kunnen communiceren via een node.js-server. een   van de gebruiker schrijft een bericht en alle andere gebruikers zullen het ontvangen.

Wanneer u alleen deze eenvoudige vereisten hebt, is socket.io alleen voldoende.. U hebt alleen een bericht nodig wachtrij wanneer u uw taken (zwaar) offline en op een gecontroleerde manier wilt verwerken.

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

Berichtwachtrijen bieden een asynchrone   communicatieprotocol, wat betekent dat   de afzender en ontvanger van het bericht   hoef niet te communiceren met de   berichtenwachtrij op hetzelfde moment.

Deze zin moet inzinken. De producent (één proces) plaatst een taak in de wachtrij en de consument verbruikt deze door de taak uit de wachtrij te nemen. De consument is meestal meerdere processen die gelijktijdig meerdere taken gebruiken. De consument kan niet van elkaar weten welke banen ze verbruiken.

Dit maakt de wachtrij een   First-in-first-out (FIFO) -gegevens   structuur.

Dat is denk ik een belangrijke eigenschap van de wachtrij. De first-in-first-out-eigenschap, hoewel met een geavanceerde berichtenwachtrij als beanstalkd u prioriteiten voor jobs kunt geven.

Ik hoop dat dit helemaal zinvol is;)


Ik ben in real-time live web-app aan het doen   ontwikkeling.

Zou je het wat beter kunnen uitleggen zodat we je een beter antwoord kunnen geven?

Ik snap niet helemaal hoe RabbitMQ werkt.   Maar van snel lezen lijkt dat   het behandelt publicatie / abonnement van   berichten.

Zie de quote over berichtenwachtrij hieronder. Laat het even inzinken. Je zou ook de WIKI kunnen lezen bericht wachtrijen.

Een gebruiker (in een browser) publiceert   iets en abonnees (in andere   browsers) krijgen die boodschap. Is dat niet zo   waar Socket.io mee bezig is   WebSockets?

Socket.io ondersteunt veel verschillende transporten (ook websockets) en dat zou moeten omdat web -ockets niet door de meeste browsers worden ondersteund. Maar bijvoorbeeld Google Chrome ondersteunt al websockets. Ik geloof dat websockets het transport van de toekomst zijn (maar nog niet!). Als je kijkt De browserondersteuningspagina van Socket.io je zult zien dat Socket.io alle grote browsers ondersteunt (sommige zelfs al oud). Het leuke is dat het dit rond een mooie API verpakt.

Wat zijn de voordelen / nadelen   voor elk van hen?

Je vergelijkt appels met sinaasappels, dus dat is nogal vreemd.


RabbitMQ

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

RabbitMQ is een berichtenmakelaar. De   belangrijkste idee is vrij simpel: het   accepteert en doorstuurt berichten. Jij kan   denk erover na als een postkantoor: wanneer   je stuurt e-mail naar de postbus die je bent   vrij zeker dat Mr. Postman dat zal doen   uiteindelijk lever de post aan uw   ontvanger. Met behulp van deze metafoor   RabbitMQ is een postbus, een postkantoor   en een postbode.

voordelen

  • Het is redelijk goed berichtenwachtrij. Persoonlijk zou ik gebruiken redis of beanstalkd.

nadelen:

  • Is niet echt voor "browsers".

Socket.io

http://socket.io/:

Socket.IO is bedoeld om realtime-apps te maken   mogelijk in elke browser en   mobiel apparaat, vervaging van de   verschillen tussen de verschillende   transportmechanismen.

voordelen

  • Het is voor browser

nadelen

  • Het is geen berichtenwachtrij.

Kan Socket.io RabbitMQ vervangen?

Nee dat kun je niet, omdat het twee compleet verschillende dingen zijn. Je vergelijkt appels met peren. Probeer beide beschrijvingen te begrijpen van de sites die ik heb geciteerd.


55
2017-07-09 19:24



RabbitMQ is een heel flexibele manier om netwerktopologieën te maken. Het is volgroeid, ondersteund en komt uit een financiële ruimte (in financiën hebben ze lange tijd berichten verstuurd). Ik gebruik RabbitMQ-serverzijde en gebruik andere protocollen om via een "gateway" verbinding te maken met RabbitMQ.

Achter de schermen is RabbitMQ geschreven in een ultra beknopte functionele taal, genaamd Erlang. Dat is op zich geen probleem, maar de bewering is dat als je weet wat je doet en het in minder coderegels kunt zeggen, het uiteindelijk betrouwbaarder en toetsbaarder is.

btw: Erlang wordt gebruikt door Facebook en Twitter voor hun dingen achter de schermen.

Nu is RabbitMQ meer dan alleen een type netwerkaansluiting ... het is gebaseerd op "gegarandeerde levering". Die functie is belangrijk voor bedrijfssituaties. KonijnMQ, anders zou het kunnen worden gebruikt om te schalen ... eigenlijk is er meer dan dat ... Ik doe het geen recht.

Ik kan geen commentaar geven op node.js omdat ik nog geen kans heb gehad om ermee te spelen. Ik ben blij met RabbitMQ.

re: socket.io (hebben we het over websockets?) - als dit voor de browser is (zoals het bericht hierboven suggereert), zou je dat mogelijk in KonijnMQ kunnen overbruggen. d.w.z. RabbitMQ is dat flexibel.


4
2017-07-12 20:57



RabbitMQ wordt gebruikt als een manier om berichten door te geven aan applicaties, niet per se gebruikers in een browser. U kunt dan een RabbitMQ-client implementeren in node.js bijvoorbeeld die de ontvangen berichten naar een browser pusht.

Zien http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/bijvoorbeeld.


3
2017-07-09 18:13