Insiderinformationen zur persistenten MQTT-Sitzung im Vergleich zur sauberen Sitzung

1. Einleitung

  • instabiles Netzwerk
  • Begrenzte Hardwareressourcen

Zwei Hauptprobleme bei IoT-Anwendungen bestehen darin, dass die Verbindung zwischen dem MQTT-Client und dem Server aufgrund von Netzwerkschwankungen und Ressourcenbeschränkungen jederzeit ungewöhnlich unterbrochen werden kann. Um die Auswirkungen einer Netzwerkverbindungsunterbrechung auf die Kommunikation zu beheben, bietet das MQTT-Protokoll eine dauerhafte Sitzungsfunktion.

Der MQTT-Client kann festlegen, ob beim Initiieren einer Verbindung zum Server eine dauerhafte Sitzung erstellt werden soll. Eine dauerhafte Sitzung speichert wichtige Daten, sodass die Sitzung über mehrere Netzwerkverbindungen hinweg fortgesetzt werden kann.

2 Funktionen

  • Vermeiden Sie den zusätzlichen Aufwand durch wiederholte Abonnements aufgrund von Netzwerkausfällen
  • Verpassen Sie keine Nachrichten, wenn Sie offline sind
  • Stellen Sie sicher, dass die Nachrichtenqualitätsgarantien QoS 1 und QoS 2 nicht durch Netzwerkausfälle beeinträchtigt werden

3. Welche Daten müssen in einer dauerhaften Sitzung gespeichert werden?

Aus dem oben Gesagten wissen wir, dass eine dauerhafte Sitzung einige wichtige Daten speichern muss, damit die Sitzung wiederhergestellt werden kann. Einige dieser Daten werden auf der Clientseite und andere auf der Serverseite gespeichert.

Im Client gespeicherte Sitzungsdaten:

  • QoS 1- und QoS 2-Nachrichten, die an den Server gesendet, aber noch nicht bestätigt wurden
  • QoS 2-Nachricht vom Server empfangen, aber noch nicht bestätigt

Auf dem Server gespeicherte Sitzungsdaten:

  • Ob die Sitzung vorhanden ist, auch wenn der Rest des Sitzungsstatus leer ist.
  • QoS 1- und QoS 2-Nachrichten, die an den Client gesendet, aber noch nicht bestätigt wurden.
  • Warten auf die Übertragung von QoS 0-Nachrichten (optional), QoS 1- und QoS 2-Nachrichten an den Client.
  • Vom Client empfangene, aber noch nicht bestätigte QoS-2-Nachrichten, Testamentsnachrichten und Testamentsverzögerungsintervalle.

4 MQTT Clean Session

Flags, die den Lebenszyklus des Sitzungsstatus steuern:

  • trueZeigt die Erstellung einer neuen Sitzung an, die automatisch zerstört wird, wenn der Client die Verbindung trennt.
  • falseZeigt die Erstellung einer dauerhaften Sitzung an, die nach der Trennung des Clients beibehalten wird, bis die Sitzung abläuft und sich abmeldet.

Die Voraussetzung dafür, dass eine dauerhafte Sitzung wiederhergestellt werden kann, besteht darin, dass der Client eine feste Client-ID verwendet, um erneut eine Verbindung herzustellen. Wenn die Client-ID dynamisch ist, wird nach erfolgreicher Verbindung eine neue dauerhafte Sitzung erstellt.

Wie im folgenden Dashboard gezeigt, ist die Verbindung im Bild zwar getrennt, kann aber dennoch angezeigt werden, da es sich um eine dauerhafte Sitzung handelt, und die Sitzung kann im Dashboard manuell gelöscht werden:

Persistente MQTT-Sitzung

EMQX unterstützt auch das Festlegen sitzungsbezogener Parameter im Dashboard.

EMQX-Dashboard

MQTT 3.1.1 gibt nicht an, wann eine persistente Sitzung abläuft. Es versteht nur von der Protokollschicht, dass diese persistente Sitzung dauerhaft existieren sollte. Das tatsächliche Szenario ist jedoch unrealistisch, da es viele Serverressourcen beansprucht. Daher stellt der Server den Benutzern tatsächlich eine globale Konfiguration zur Verfügung, um die Ablaufzeit der Sitzung zu begrenzen. Wenn die Sitzungsablaufzeit beispielsweise auf 5 Minuten eingestellt ist, beträgt die maximale Anzahl von Nachrichten 1000 und QoS-0-Nachrichten werden nicht gespeichert.

5 Verwendung

New ConnectionKlicken Sie nach dem Öffnen von MQTTX auf die Schaltfläche, um eine [MQTT-Verbindung] zu erstellen, wie unten gezeigt .

MQTT-Client

Erstellen Sie MQTT_V3eine Verbindung mit dem Namen „Clean Session is close“ (also „false“), wählen Sie MQTT Version 3.1.1 aus und klicken Sie dann auf Connectdie Schaltfläche in der oberen rechten Ecke.

Erstellen Sie eine MQTT-Verbindung

Nach erfolgreicher Verbindung clean_session_falsewird das Thema abonniert und QoS auf 1 gesetzt.

Abonnieren Sie ein MQTT-Thema

Nachdem das Abonnement erfolgreich abgeschlossen wurde, klicken Sie oben rechts auf die Schaltfläche „Trennen“. Erstellen Sie dann eine MQTT_V3_PublishVerbindung mit dem Namen und legen Sie die MQTT-Version auf 3.1.1 fest. Nach erfolgreicher Verbindung clean_session_falsewerden zwei QoS 1-Nachrichten im Thema veröffentlicht.

Veröffentlichen Sie MQTT-Nachrichten

Wählen Sie dann die MQTT_V3-Verbindung aus, klicken Sie auf die Schaltfläche „Verbinden“, um eine Verbindung zum Server herzustellen, und Sie erhalten erfolgreich zwei Offline-Nachrichten.

Empfangen Sie MQTT-Nachrichten

6 Sitzungsverbesserungen in MQTT 5.0

In MQTT 5.0 ist Clean Session unterteilt in:

  • Sauberer Start

    Gibt an, ob beim Herstellen einer Verbindung eine völlig neue Sitzung erstellt oder versucht werden soll, eine vorhandene Sitzung wiederzuverwenden

  • Sitzungsablaufintervall

    Gibt die Ablaufzeit der Sitzung an, nachdem die Netzwerkverbindung getrennt wurde

Ein sauberer Start von truebedeutet, dass jede vorhandene Sitzung verworfen und eine völlig neue Sitzung erstellt werden muss; ein sauberer Start falsevon bedeutet, dass die mit der Client-ID verknüpfte Sitzung verwendet werden muss, um die Kommunikation mit dem Client wieder aufzunehmen (es sei denn, die Sitzung ist nicht vorhanden). ).

Das Sitzungsablaufintervall löst das Problem der Verschwendung von Serverressourcen, das durch die Persistenz persistenter Sitzungen in MQTT 3.1.1 verursacht wird. Auf 0 gesetzt oder nicht gesetzt, was bedeutet, dass die Sitzung abläuft, wenn die Verbindung getrennt wird; auf einen Wert größer als 0 gesetzt, der angibt, wie viele Sekunden die Sitzung verbleiben wird, nachdem die Netzwerkverbindung geschlossen wird; gesetzt, um anzuzeigen, 0xFFFFFFFFdass die Sitzung nie abläuft erlöschen.

7 FAQ

Sind nach Beendigung der Sitzung noch aufbewahrte Nachrichten vorhanden?

[MQTT-aufbewahrte Nachrichten] sind nicht Teil des Sitzungsstatus und werden am Ende der Sitzung nicht gelöscht.

Woher weiß der Client, dass die aktuelle Sitzung die fortgesetzte Sitzung ist?

Ab v3.1.1 hat das MQTT-Protokoll das Feld „Session Present“ für CONNACK-Nachrichten entworfen. Wenn der vom Server zurückgegebene Wert dieses Felds 1 ist, bedeutet dies, dass die aktuelle Verbindung die vom Server gespeicherte Sitzung wiederverwendet. Der Client kann diesen Feldwert verwenden, um zu entscheiden, ob er sich nach erfolgreicher Verbindung erneut anmelden muss.

Empfehlungen für die Verwendung persistenter Sitzungen

  • Die dynamische Client-ID kann nicht verwendet werden und die Client-ID muss jedes Mal festgelegt werden, wenn der Client eine Verbindung herstellt.
  • Bewerten Sie die Sitzungsablaufzeit angemessen basierend auf der Serverleistung, den Netzwerkbedingungen, dem Clienttyp usw. Wenn Sie den Wert zu lang einstellen, werden mehr Serverressourcen beansprucht. Wenn Sie ihn zu kurz einstellen, läuft die Sitzung ab, ohne dass die Verbindung erfolgreich wiederhergestellt werden kann.
  • Wenn der Client feststellt, dass die Sitzung nicht mehr benötigt wird, kann er „Clean Session“ als True verwenden, um die Verbindung wiederherzustellen, und die Verbindung dann trennen, nachdem die erneute Verbindung erfolgreich war. Wenn es sich um MQTT 5.0 handelt, können Sie das Sitzungsablaufintervall beim Trennen direkt auf 0 setzen, was bedeutet, dass die Sitzung nach dem Trennen der Verbindung ungültig wird.

8 Zusammenfassung

Damit ist die Einführung in persistente MQTT-Sitzungen abgeschlossen und die Verwendung von Clean Session über den Desktop-Client demonstriert. Leser können auf diesen Artikel verweisen, um persistente MQTT-Sitzungen zu verwenden, um Offline-Nachrichten zu empfangen und den Abonnementaufwand zu reduzieren.

Über den Autor: Ein technischer Experte eines Staatsunternehmens in Shanghai mit Erfahrung in Backend-Forschung und -Entwicklung und -Architektur für viele große Hersteller. Er ist verantwortlich für die modulare, serviceorientierte und plattformbasierte Forschung und Entwicklung äußerst komplexer Geschäftssysteme. Er verfügt über umfangreiche Erfahrung in der Führung von Teams und verfügt über umfassende Kenntnisse in der Identifizierung und Ausbildung von Talenten.

Referenz:

Programmierauswahlnetzwerk

Dieser Artikel wurde von OpenWrite veröffentlicht, einem Blog, der mehrere Artikel veröffentlicht !

Broadcom kündigte die Beendigung des bestehenden VMware-Partnerprogramms an . Site B stürzte zweimal ab, Tencents „3.29“-Vorfall der Stufe eins … Bestandsaufnahme der zehn häufigsten Ausfallvorfälle im Jahr 2023, Vue 3.4 „Slam Dunk“ veröffentlicht, Yakult bestätigte, dass 95G-Daten durchgesickert sind MySQL 5.7, Moqu, Li Tiaotiao... Bestandsaufnahme der (Open-Source-)Projekte und Websites, die 2023 „gestoppt“ werden „2023 China Open Source Developer Report“ wird offiziell veröffentlicht Rückblick auf die IDE vor 30 Jahren: nur TUI, helle Hintergrundfarbe …… Julia 1.10 offiziell veröffentlicht Rust 1.75.0 veröffentlicht NVIDIA hat GeForce RTX 4090 D speziell für den Verkauf in China auf den Markt gebracht
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/3494859/blog/10570103
Recomendado
Clasificación