Laut diesem Blog unterstützt Mosquitto (der MQTT-Broker) jetzt die Verbindung zu Kunden über Web-Sockets. Der Blog - Artikel scheint anzudeuten , dass Web - Sockets für Browser - Anwendungen nützlicher sind, da Web - Browser (noch) nicht die richtige TCP - Sockets unterstützen, obwohl die Web - Socket - Protokoll wird von der Mehrheit der modernen Browsern unterstützt.
Wenn ich nur verschiedene Clients in einem Netzwerk habe (z. B. Sensoren und Aktoren, die auf Mikrocontrollern wie Raspberry Pis basieren), hat die Verwendung von Web-Sockets gegenüber direkten TCP-Verbindungen einen Vorteil? Lohnt sich der Overhead des Web-Socket-Protokolls nur, wenn Sie mit einem Browser kommunizieren?
mqtt
mosquitto
web-sockets
Aurora0001
quelle
quelle
Antworten:
Die Frage hier scheint zu sein: "Soll ich MQTT über TCP oder MQTT über Websockets (die auch über TCP gehen) verwenden?" Mit anderen Worten, ist "das Einkapseln von MQTT in das Websockets-Protokoll eine gute Idee?"
Dies hängt (fast) ausschließlich von Ihrer Anwendung ab und davon, ob Sie Unterstützung für Websockets benötigen - wahrscheinlich zum Konsumieren von Nachrichten in einem Browser oder aus Firewall-Gründen. Wenn Ihr Server nicht über Port 1883 oder besser 8883 für reines MQTT zugänglich sein kann, sind Websockets möglicherweise die beste Option.
Websockets erfordern zwar zusätzliche Bandbreite, aber ob dies für Sie wichtig ist, können nur Sie beantworten.
Es ist auch erwähnenswert, dass in aktuellen Versionen von Mosquitto Websockets nicht so gut funktionieren wie sie könnten, so dass es beim Senden / Empfangen von Websockets-Nachrichten zu einer zusätzlichen Latenz kommen kann. Dies ist jedoch in zukünftigen Versionen kein Problem.
quelle
Wenn Sie nur innerhalb Ihres Netzwerks ( Intranet ) kommunizieren , ist die Verwendung von reinem TCP in Ordnung. Wenn Sie jedoch eine Verbindung zu einem anderen Server herstellen müssen, treten Probleme auf.
Weil die meisten modernen Server es Clients nicht erlauben, über zufällige Ports eine Verbindung herzustellen. Sie erlauben nur einigen dedizierten Ports, eine Verbindung herzustellen. Das ist alles. Wenn Sie daher eine Verbindung zu einem anderen Server herstellen müssen, verwenden Sie lieber einen Websocket als eine reine TCP-Verbindung.
Wenn Sie den Overhead in Betracht ziehen, ist er nicht viel größer. Sie können auf diesen Artikel verweisen , wenn Sie mehr über den Overhead des Websockets erfahren möchten.
Meiner persönlichen Meinung nach ist es besser, immer Websocket zu verwenden, es sei denn, Sie haben ernsthafte Bedenken.
quelle
tl; dr - bevorzugen Sie immer freie Bibliotheken, um sie selbst zu codieren (es sei denn, Sie haben extreme Anforderungen)
Wie lang ist ein Stück Schnur? (YMMV)
Ich kann nur allgemein sprechen, aber ich ziehe Wrapper-Bibliotheken immer Raw-Sockets vor (oder der Codierung von allem, was ich kostenlos aus einer Bibliothek bekommen kann).
Sie machen die Codierung einfacher und weniger fehleranfällig. Sie kümmern sich um eine Menge Hausarbeit und Fehlerbehandlung. Dies ist Code, den Sie selbst schreiben und debuggen müssten, da eine Bibliothek im Allgemeinen gut überprüft und getestet wurde und von Tausenden anderen verwendet wird, die alle von ihnen verwendet werden wird Fehler für Sie melden / beheben.
Außerdem müssen Sie weniger Code warten (und möglicherweise portieren), was mehr Zeit bedeutet, um Ihre App zu entwickeln, zu testen und zu polieren oder mit der nächsten fortzufahren.
Der einzige Aufwand ist wohl ein Funktionsaufruf, wenn Sie akzeptieren, dass all diese Bibliothekargüte (Fehlerbehandlung, Schlauchhaltung und dergleichen) etwas ist, das Sie selbst codieren müssten, um eine gute, stabile Software zu erhalten.
Wenn Sie über die Leistung besorgt sind, nur Profil. Aber wenn Ihre Steckdose nicht hunderte Male pro Sekunde aktiv ist, würde ich mich nicht einmal darum kümmern.
quelle