Was ist der Unterschied zwischen MQTT und Web Sockets und wann sollte ich sie verwenden?

17

Was sind die Hauptunterschiede zwischen MQTT und Web Sockets?

Bei Verwendung von IoT für die Heimautomation - Steuern und Überwachen des Zugriffs über verschiedene Geräte. Welches Gerät sollte verwendet werden, wenn ein Zugriff auf die Rest-API und den Browser erforderlich ist.

Ich verwende Java (Pi4J Library) auf einem Raspberry Pi 2 B +.

Ich habe mehrere Sensoren wie Licht und Dunkel, Luftfeuchtigkeit, PID usw. eingerichtet.

Ich habe auch einen Cloud-Server, auf dem ich die Daten bei Bedarf senden kann.

Shakti Phartiyal
quelle
1
Sie entscheiden, welche Sie verwenden möchten, indem Sie alle aktuellen und wahrscheinlichen zukünftigen Anforderungen klar definieren. Anschließend generieren Sie eine Kreuzmatrix, aus der hervorgeht, welche Technologie Ihren Anforderungen am besten entspricht. Anschließend wählen Sie eine oder mehrere Technologien aus, um Ihre Anforderungen zu erfüllen.

Antworten:

23

Die Fragestellung hier ist etwas irreführend, da diese Protokolle eigentlich gar nicht miteinander verglichen werden können. Sie sind wie TCP und IP, Schichten übereinander. [1]

Websockets ist ein Low-Level-Protokoll, das Dinge bereitstellt, die der RESTful-HTTP seines Konkurrenten auf derselben Ebene nicht bereitstellt: ein immer offener Kanal, ohne dass bei jeder Anforderung ein Öffnen und Schließen erforderlich ist. [2]

MQTT bietet eine einfache Möglichkeit zum Veröffentlichen oder Abonnieren von Daten. Die Verwirrung kann sein, dass diese Abonnements eine Art von Kanälen sind, aber das ist eine andere Art von Kanal. Um eine konstant offene Verbindung in MQTT herzustellen, benötigen Sie gleichzeitig Websockets UND MQTT.

In IoT und in jedem Design müssen Sie auswählen, ob Sie einen Stream benötigen oder nicht (WebSockets vs RESTful). In Bezug auf MQTT müssen Sie möglicherweise überlegen, ob Sie ein Abonnement und einen Veröffentlichungsmechanismus für Ihre App wünschen.

Unter bestimmten Umständen können Sie MQTT über WebSockets in Betracht ziehen, wenn eine gemeinsame Sache vorliegt. [3]

Antwort auf die Frage:

Sie sagen, Sie haben einen Rasperry Pi und mehrere Sensoren in der Nähe. Wenn die Sensoren mit ihren eigenen Controllern von Rasperry weit entfernt sind, können Sie MQTT zum Erfassen der Daten verwenden. Senden Sie die Daten zum Speichern in der Cloud über HTTP. In der Cloud Daten durch Ruhe liefern. [4]

Für Websockets besteht keine Notwendigkeit, aber wenn Sie es nützlich finden, verwenden Sie es.

Quellen:

[1] https://www.quora.com -Dinge

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot

mico
quelle
3
Ebenfalls relevant für Ihren letzten Punkt: Diese Antwort von Roger Light, Entwickler des Mosquitto MQTT-Brokers, vergleicht die Anwendungsfälle von Raw-Sockets mit Web-Sockets mit MQTT.
Aurora0001
Danke mico das ist eine wunderbare erklärung. aber mir ist immer noch nicht klar, was ich verwenden soll .. was würdest du für mein szenario empfehlen?
Shakti Phartiyal
3
Gute Antwort, aber: "Öffnen und Schließen" WRT WS: // vs. HTTP: // könnte irreführend sein; Erstens können HTTP 1.1-Anforderungen per Pipeline weitergeleitet werden, sodass eine Verbindung auf einer Literal-Socket-Ebene eine unbegrenzte Anzahl von Anforderungen enthalten kann, ohne in diesem Sinne zu öffnen und zu schließen. Es ist besser zu sagen, dass der Vorteil von Websockets darin besteht, dass es keine Verpflichtung für einen synchronen "Anforderungs- und Antwort" -Zyklus gibt. Sie haben einen offenen, bidirektionalen Kanal mit einem Minimum an Regeln für den Austausch.
Goldlöckchen
"Um eine konstant offene Verbindung in MQTT herzustellen, benötigen Sie gleichzeitig Websockets UND MQTT." Bist du dir da sicher? Erklären Sie bitte, warum MQTT webSockets verwenden muss, um eine "konstant offene Verbindung" aufrechtzuerhalten, wenn der Client weiterhin PINGRESP-Pakete auf dem Server veröffentlichen kann. Ein Client, der MQTT implementiert, sendet ein PINGRESP-Paket, um die Verbindung am Leben zu erhalten, und ein Client, der webSockets implementiert, sendet mit keepAlive () ein leeres Paket webSocket.send ('') an den Server, um die Verbindung am Leben zu erhalten.
John
Hmm .. Sie können die Verbindung mit diesem Paket am Leben erhalten . Ich fand heraus, dass MQTT über TCP / IP (nicht HTTP) funktioniert. In diesem Fall können Sie die Verbindung offen lassen.
mico
9

Sie sind insofern vergleichbar, als beide eine Vollduplex-Kommunikation ermöglichen, sodass der Server Daten sofort an den Client weiterleiten kann, ohne dass der Client sie abfragt (wie dies bei HTTP der Fall sein könnte).

Websockets ist jedoch für eine einfache Punkt-zu-Punkt-Verbindung zwischen einem Client und einem Server ausgelegt. MQTT überlagert das Senden grundlegender Nachrichten mit zusätzlichen Abstraktionen, sodass mehrere interessierte Parteien Nachrichten abonnieren können, die sie interessieren könnten. Nachrichten können daher nach 'Nachrichtenthema' weitergeleitet werden, sodass viele Clients eine fiktive Warteschlange gemeinsam nutzen können, in der ein Server alle Nachrichten von allen Clients abhören, aber auch nach Thema filtern kann.

MQTT verfügt über eine Reihe weiterer nützlicher Funktionen, z. B. beibehaltene Nachrichten, sodass Abonnenten die Nachricht sofort erhalten, und LWT (Last Will and Testament), eine Nachricht, die automatisch gesendet werden kann, wenn der Client die Verbindung abnormal trennt. Zusammenfassend lässt sich sagen, dass MQTT überlegen ist und Funktionen und Abstraktionen bietet, die ein einfaches Websocket nicht bietet.

TheMagicCow
quelle