Das folgende Material ist eine Fortsetzung des Artikels über die in der neuen Version von MQTTv5.0 hinzugefügten Funktionen. Wenn Sie es bereits studiert haben, fällt es Ihnen nicht schwer zu bemerken, dass die meisten neuen Funktionen auf dem Konzept der Eigenschaften basieren, die dem Paket hinzugefügt werden können. In diesem Artikel werden wir sie detailliert analysieren.
Ca. - Der Artikel richtet sich an diejenigen, die ein Interesse haben oder tief in die Feinheiten von MQTT eintauchen müssen. Hier wird es keine Bilder und lyrischen Abschweifungen geben, nur Hardcore !!!
Unten finden Sie eine Tabelle aller Eigenschaften ( siehe Abschnitt 2.2.2.2 in der Spezifikation ).
| ICH WÜRDE | Name | Datentyp | Paket / Testament Eigenschaften |
| 1 | Payload Format Indicator | Byte | PUBLISH, Will Properties |
| 2 | Ablaufintervall für Nachrichten | Vier-Byte-Ganzzahl | PUBLISH, Will Properties |
| 3 | Inhaltstyp | UTF-8-codierter String | PUBLISH, Will Properties |
| 8 | Antwortthema | UTF-8-codierter String | PUBLISH, Will Properties |
| neun | Korrelationsdaten | Binärdaten | PUBLISH, Will Properties |
| elf | Abonnement-ID | Variable Byte Integer | VERÖFFENTLICHEN, ABONNIEREN |
| 17 | Sitzungsablaufintervall | Vier-Byte-Ganzzahl | CONNECT, CONNACK, DISCONNECT |
| achtzehn | Zugewiesene Client-ID | UTF-8-codierter String | CONNACK |
| 19 | Server am Leben bleiben | Zwei-Byte-Ganzzahl | CONNACK |
| 21 | Authentifizierungsmethode | UTF-8-codierter String | VERBINDEN, VERBINDEN, AUTH |
| 22 | Authentifizierungsdaten | Binärdaten | VERBINDEN, VERBINDEN, AUTH |
| 23 | Probleminformationen anfordern | Byte | VERBINDEN |
| 24 | Verzögert das Intervall | Vier-Byte-Ganzzahl | Will Eigenschaften |
| 25 | Antwortinformationen anfordern | Byte | VERBINDEN |
| 26 | Antwortinformationen | UTF-8-codierter String | CONNACK |
| 28 | Serverreferenz | UTF-8-codierter String | CONNACK, TRENNEN |
| 31 | Grundzeichenfolge | UTF-8-codierter String | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT, AUTH |
| 33 | Maximal empfangen | Zwei-Byte-Ganzzahl | VERBINDEN, VERBINDEN |
| 34 | Themenalias maximal | Zwei-Byte-Ganzzahl | VERBINDEN, VERBINDEN |
| 35 | Themen-Alias | Zwei-Byte-Ganzzahl | VERÖFFENTLICHEN |
| 36 | Maximale QoS | Byte | CONNACK |
| 37 | Verfügbar behalten | Byte | CONNACK |
| 38 | Benutzereigenschaft | UTF-8-Zeichenfolgenpaar | CONNECT, CONNACK, PUBLISH, Will Properties, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, AUTH |
| 39 | Maximale Paketgröße | Vier-Byte-Ganzzahl | VERBINDEN, VERBINDEN |
| 40 | Wildcard-Abonnement verfügbar | Byte | CONNACK |
| 41 | Abonnement-ID verfügbar | Byte | CONNACK |
| 42 | Geteiltes Abonnement verfügbar | Byte | CONNACK |
Schauen wir sie uns jetzt genauer an.
Nutzlastformatanzeige - Nutzlastformatanzeige
- 0 - Daten sind ein Satz undefinierter Bytes, was dem Nicht-Senden eines Indikators für das Nutzdatenformat entspricht.
- 1 - Die Daten sind UTF-8-codierte Zeichendaten.
Nachrichtenablaufintervall - Nachrichtenablaufintervall
Eine Zahl, die das Ablaufintervall der Nachricht darstellt (in Sekunden).
Wenn das Nachrichtenablaufintervall abgelaufen ist und der Server die Nachricht nicht an den richtigen Teilnehmer übermitteln konnte, muss er die Nachricht für diesen Teilnehmer löschen.
Inhaltstyp - Inhaltstyp
Die Bedeutung des Inhaltstyps wird vom sendenden und empfangenden Client bestimmt.
Antwortthema - ein Thema für eine Antwort
Eine UTF-8-Zeichenfolge, die als Thema für die Antwortnachricht verwendet wird.
Der Empfänger der Nachricht mit dem angegebenen Thema für die Antwort sendet seine Antwort und verwendet dieses Thema als Thema seiner Veröffentlichung.
Die Anfrage / Antwort-Interaktion erfolgt in diesem Fall wie folgt ( siehe Abschnitt 4.10.1 in der Spezifikation ):
- Der Client (Absender) veröffentlicht eine Anforderungsnachricht mit einem Thema, das das Thema für die Antwort angibt.
- () , , . . , .
- , , .
- . - . , .
Correlation Data —
Die Korrelationsdaten werden vom Absender der Anforderungsnachricht verwendet, um zu bestimmen, zu welcher Anforderung die Antwortnachricht gehört, wenn sie empfangen wird. Wenn keine Korrelationsdaten vorhanden sind, benötigt der Anforderer keine Korrelationsdaten.
Wenn die Anforderungsnachricht Korrelationsdaten enthält, muss der Empfänger die Korrelationsdaten auch als Eigenschaft in das PUBLISH-Paket der Antwortnachricht aufnehmen.
Der Korrelationsdatenwert ist nur für den Absender der Anforderungsnachricht und den Empfänger der Antwortnachricht von Bedeutung.
Abonnement-ID - Abonnement-ID
Eine Nummer, die die Abonnement-ID darstellt.
Wenn die Veröffentlichung das Ergebnis einer Übereinstimmung mit mehr als einem Abonnement ist, werden mehrere Abonnement-IDs angegeben. In diesem Fall spielt ihre Reihenfolge keine Rolle.
Ein Kunde kann auch mehrere Abonnements abschließen, die einer bestimmten Veröffentlichung entsprechen, und dieselbe Kennung für mehrere von ihnen verwenden. In diesem Fall enthält das PUBLISH-Paket mehrere identische Abonnement-IDs.
Die Abonnement-ID ist jedem Abonnement zugeordnet, das als Ergebnis des SUBSCRIBE-Pakets erstellt oder geändert wurde. Wenn eine Abonnement-ID vorhanden ist, wird diese mit dem Abonnement gespeichert. Wenn diese Eigenschaft nicht angegeben wird, wird mit dem Abonnement kein Abonnement gespeichert.
Abonnement-IDs sind Teil des Sitzungsstatus auf dem Server und werden an den Client zurückgegeben, der das entsprechende PUBLISH-Paket empfängt. Sie werden aus dem Sitzungsstatus des Servers entfernt, wenn der Server ein UNSUBSCRIBE-Paket empfängt, wenn der Server ein SUBSCRIBE-Paket vom Client für denselben Themenfilter empfängt, jedoch mit einer anderen Abonnement-ID oder ohne Abonnement-ID, oder wenn der Server im CONNACK-Paket ein Sitzungsgeschenk von 0 sendet.
Sitzungsablaufintervall - Sitzungsablaufintervall
Eine Zahl, die das Intervall darstellt, in dem die Sitzung abläuft (in Sekunden).
Wenn kein Sitzungsablaufintervall vorhanden ist, wird der Wert 0 verwendet. Wenn er auf 0 gesetzt ist oder nicht vorhanden ist, endet die Sitzung, wenn die Netzwerkverbindung geschlossen wird.
Wenn das Sitzungsablaufintervall 0xFFFFFFFF (UINT_MAX) ist, läuft die Sitzung nicht ab.
Der Client und der Server müssen den Sitzungsstatus beibehalten, nachdem die Netzwerkverbindung geschlossen wurde, wenn das Sitzungsablaufintervall größer als 0 ist.
Der Client kann über ein Netzwerk, das eine intermittierende Verbindung bereitstellt, eine Verbindung zum Server herstellen. Dieser Client kann ein kurzes Sitzungsablaufintervall verwenden, um die Verbindung wiederherzustellen, wenn das Netzwerk wieder verfügbar ist, und weiterhin zuverlässig Nachrichten zuzustellen. Wenn der Client keine Zeit hat, die Verbindung wiederherzustellen, gehen die Nachrichten verloren.
Das Setzen von Clean Start auf 1 und das Ablaufintervall 0 entspricht dem Setzen von CleanSession auf 1 in der MQTT-Spezifikation Version 3.1.1. Das Setzen von Clean Start auf 0 und kein Sitzungsablaufintervall entspricht dem Setzen von CleanSession auf 0 in der MQTT-Spezifikation Version 3.1.1.
Zugewiesene Client-ID - Zugewiesene Client-ID
Eine Zeichenfolge, die die vom Server zugewiesene Client-ID ist. Wird verwendet, wenn im CONNECT-Paket eine Client-ID mit der Länge Null verwendet wurde.
Server Keep Alive - Keep Alive Server
Eine Zahl, die die vom Server zugewiesene Keep Alive-Zeit definiert. Wenn der Server Server Keep Alive in einem CONNACK-Paket zurückgibt, MUSS der Client diesen Wert anstelle des Werts verwenden, den er als Keep Alive gesendet hat. Wenn der Server Server Keep Alive nicht sendet, MUSS er den vom Client im CONNECT-Paket festgelegten Keep Alive-Wert verwenden.
Die Hauptverwendung von Server Keep Alive für einen Server besteht darin, den Client darüber zu informieren, dass der Client bei Inaktivität getrennt wird, bevor das vom Client angegebene Keep Alive-Zeitlimit überschritten wird.
Authentifizierungsmethode - Authentifizierungsmethode
Eine Zeichenfolge, die den Namen der Authentifizierungsmethode enthält, die für die erweiterte Authentifizierung verwendet wird.
Wenn keine Authentifizierungsmethode vorhanden ist, wird keine erweiterte Authentifizierung durchgeführt.
Eine Authentifizierungsmethode ist eine Vereinbarung zwischen dem Client und dem Server über die Bedeutung der in den Authentifizierungsdaten und anderen Feldern in CONNECT gesendeten Daten sowie über den Austausch und die Verarbeitung, die der Client und der Server benötigen, um die Authentifizierung abzuschließen. Die Authentifizierungsmethode ist normalerweise ein SASL-Mechanismus.
Authentifizierungsdaten - Authentifizierungsdaten
Binärdaten mit Authentifizierungsdaten. Wird nur gesendet, wenn eine Authentifizierungsmethode angegeben ist. Der Inhalt dieser Daten wird durch die Authentifizierungsmethode bestimmt.
Anforderungsprobleminformationen - Informationen zum Anforderungsproblem
Der Client verwendet diesen Wert, um anzugeben, ob bei einem Fehler eine Ursachenzeichenfolge oder benutzerdefinierte Eigenschaften ausgelöst werden.
- 0 - Der Server kann eine Grundzeichenfolge oder benutzerdefinierte Eigenschaften in einem CONNACK- oder DISCONNECT-Paket zurückgeben, sollte jedoch keine Grundzeichenfolge oder benutzerdefinierte Eigenschaften in einem anderen Paket als PUBLISH, CONNACK oder DISCONNECT senden.
- 1 - Der Server kann eine Grundzeichenfolge oder benutzerdefinierte Eigenschaften für jedes Paket zurückgeben, sofern dies zulässig ist.
Will Delay Interval - Will Message Delay Intervall
Eine Zahl, die das Intervall der Verzögerung der Willensnachricht (in Sekunden) darstellt. Wenn es kein Verzögerungsintervall gibt, ist der Standardwert 0 und es gibt keine Verzögerung, bevor die Willensnachricht veröffentlicht wird.
Der Server verzögert das Versenden der Nachricht, bis die Verzögerungszeit abläuft oder die Sitzung endet, je nachdem, was zuerst eintritt. Wenn vor Ablauf des Verzögerungsintervalls eine neue Netzwerkverbindung zu dieser Sitzung hergestellt wird, sollte der Server keine Willensnachricht senden.
Eine Möglichkeit, dies zu verwenden, besteht darin, die Veröffentlichung einer Testamentnachricht zu verhindern, wenn eine vorübergehende Trennung vom Netzwerk besteht und der Client die Verbindung wiederherstellen und fortsetzen kann, bevor die Nachricht veröffentlicht wird.
Antwortinformationen anfordern - Informationen für eine Antwort anfordern
Ein Byte mit dem Wert 0 oder 1. Der Client verwendet diesen Wert, um den Server nach den CONNACK-Antwortinformationen zu fragen.
- 0 - Der Server sollte keine Antwortinformationen zurückgeben.
- 1 - Der Server kann Antwortinformationen in einem CONNACK-Paket zurückgeben. Dies ist jedoch nicht erforderlich, selbst wenn der Client diese Informationen angefordert hat.
Antwortinformationen - Informationen für eine Antwort
Eine UTF-8-Zeichenfolge, die als Basis für die Erstellung des Antwortthemas verwendet wird. Die Art und Weise, wie der Client aus den Antwortinformationen ein Antwortthema erstellt, wird in dieser Spezifikation nicht definiert.
In der Regel wird dies verwendet, um eine global eindeutige Teilmenge von Themen zu übertragen, die für diesen Client reserviert sind, zumindest für die Lebensdauer seiner Sitzung. Mit diesem Mechanismus kann diese Konfiguration einmal auf dem Server und nicht auf jedem Client durchgeführt werden.
Serverreferenz - Link zum Server
Eine Zeichenfolge, die vom Client verwendet werden kann, um einen anderen verwendeten Server zu identifizieren. Der Wert dieser Zeichenfolge ist eine durch Leerzeichen getrennte Liste von Links. Das Format der Links ist nicht geregelt.
Der Server kann anfordern, dass der Client einen anderen Server verwendet, indem er einen CONNACK oder DISCONNECT mit dem Ursachencode "Anderen Server verwenden" oder "Server verschoben" sendet. Beim Senden eines dieser Codes kann der Server auch eine Serverreferenzeigenschaft enthalten, um den Standort des Servers oder der Server anzugeben, die der Client verwenden soll.
- Anderen Server verwenden - Der Client muss vorübergehend wechseln, um einen anderen Server zu verwenden.
- Server verschoben - Der Client muss immer eine Verbindung zu einem anderen Server herstellen.
Es wird empfohlen, dass jeder Link aus einem Namen gefolgt von einem Doppelpunkt und einer Portnummer besteht. Wenn der Name einen Doppelpunkt enthält, kann die Namenszeichenfolge in eckige Klammern gesetzt werden. Ein Name in eckigen Klammern darf nicht das rechte eckige Klammernzeichen ("]") enthalten. Dies wird verwendet, um eine IPv6-Adresse darzustellen, die einen Doppelpunkt als Trennzeichen verwendet.
Der Name in einer Serververbindung ist normalerweise ein Hostname, ein DNS-Name, ein SRV-Name oder eine IP-Adresse. Der Wert nach dem Doppelpunkt ist normalerweise die dezimale Portnummer. Dies ist nicht erforderlich, wenn die Portinformationen aus dem Namen stammen (z. B. für SRV) oder die Standardeinstellung ist.
Wenn mehrere Links angegeben sind, wird vom Client erwartet, dass er einen davon auswählt.
Beispiele von
myserver.xyz.org
myserver.xyz.org:8883
10.10.151.22:8883 [fe80::9610:3eff:fe1c]:1883
myserver.xyz.org:8883
10.10.151.22:8883 [fe80::9610:3eff:fe1c]:1883
Reason String - der Reason String
Eine Zeichenfolge, die den mit dieser Antwort verbundenen Grund beschreibt. Der Server verwendet diesen Wert, um dem Client zusätzliche Informationen bereitzustellen.
Die korrekte Verwendung der Ursachenzeichenfolge im Client umfasst die Verwendung dieser Informationen in einer vom Clientcode ausgelösten Ausnahme oder die Protokollierung der Ursachenzeichenfolge.
Empfangsmaximum - Der Maximalwert der Anzahl der QOS-Pakete> 0
Eine Zahl, die das Sendekontingent festlegt, mit dem die Anzahl der PUBLISH QOS> 0-Pakete begrenzt wird, die gesendet werden können, ohne PUBACK (für QoS 1) oder PUBCOMP (für QoS 2) zu empfangen. Das heißt, dieser Wert wird verwendet, um die Anzahl der gleichzeitig gesendeten QoS 1- und QoS 2-Veröffentlichungen zu begrenzen. Der Client / Server sollte keine Nachrichten mit QoS 1 und QoS 2 senden, wenn Nachrichten mit maximalem Empfang gesendet wurden, die noch keine Antworten erhalten haben. Wenn das Empfangsmaximum erreicht ist, kann das Senden von Paketen mit QoS 0 ebenfalls angehalten werden, ist jedoch nicht erforderlich. Gleichzeitig muss das Senden anderer Pakete als PUBLISH nicht verzögert werden.
Wenn sowohl der Client als auch der Server das Empfangsmaximum auf 1 gesetzt haben, stellen sie sicher, dass nicht mehr als eine Nachricht "im Flug" gleichzeitig ist.
Der angegebene Wert gilt nur für die aktuelle Netzwerkverbindung und wird bei erneuter Verbindung neu initialisiert.
Wenn nicht angegeben, wird standardmäßig 65.535 verwendet.
Themenalias Maximum - Der Maximalwert des Themenalias
Eine Zahl, die den Maximalwert eines Themenalias darstellt.
Dieser Wert gibt den größten Wert an, der als Themenalias akzeptiert wird. Es wird verwendet, um die Anzahl der Themenaliasnamen zu begrenzen, die in dieser Verbindung gespeichert werden müssen.
Themen-Alias - Themen-Alias
Um die Größe des PUBLISH-Pakets zu verringern, kann der Absender einen Themenalias verwenden. Dies ist ein ganzzahliger Wert, der zum Identifizieren des Themas verwendet wird, anstatt den Themennamen zu verwenden. Diese Technik reduziert die Größe des PUBLISH-Pakets und ist nützlich, wenn Themennamen lang sind und derselbe Name häufig in einer Netzwerkverbindung wiederverwendet wird.
Auf der Empfängerseite wird beim Empfang eines Alias für ein Thema die erforderliche Entsprechung zwischen dem Thema und seinem Alias hergestellt.
Wenn das PUBLISH-Paket einen Themenalias enthält, verarbeitet der Empfänger diesen wie folgt ( siehe Abschnitt 3.3.4 in der Spezifikation ):
- ,
a) , , ,
b) , , , .
- ,
a) ,
b) , .
Maximum QoS — QoS
Kann 0 oder 1 sein. Wenn keine maximale QoS vorhanden ist, verwendet der Client die maximale QoS von 2.
Wenn der Server keine PUBLISH QoS 1- oder QoS 2-Pakete unterstützt, MUSS er die maximale QoS in einem CONNACK-Paket senden, das die höchste unterstützte QoS angibt.
Wenn der Client die maximale QoS vom Server empfängt, sollte er keine PUBLISH-Pakete mit einer QoS-Stufe senden, die das angegebene Maximum überschreitet.
Verfügbar behalten - Speichern ist verfügbar
- 0 - gespeicherte Nachrichten werden nicht unterstützt,
- 1 - gespeicherte Nachrichten werden unterstützt.
Ein Client, der vom Server den Wert Retain Available von 0 erhält, darf KEIN PUBLISH-Paket mit dem Flag RETAIN auf 1 senden.
Benutzereigenschaft - Benutzereigenschaft
Es ist ein Zeichenfolgenpaar "Name" - "Wert". Diese Eigenschaft kann im Gegensatz zu anderen mehrfach auftreten. Der gleiche Name kann für mehrere Eigenschaften verwendet werden.
Diese Eigenschaft kann verwendet werden, um zusätzliche Diagnose- oder andere Informationen bereitzustellen.
Die Bedeutung dieser Eigenschaften ist in der Spezifikation nicht angegeben, ihre Bedeutung und Interpretation sind nur den sendenden und empfangenden Clients bekannt.
Maximale Paketgröße - maximale Paketgröße
Eine Zahl, die die maximale Paketgröße angibt, die der Client / Server akzeptieren möchte. Die Paketgröße ist die Gesamtzahl der Bytes im MQTT-Paket. Diese Eigenschaft wird verwendet, um anzugeben, dass Pakete, die diesen Grenzwert überschreiten, nicht verarbeitet werden.
Wenn es keine maximale Paketgröße gibt, wird keine Paketgrößenbeschränkung festgelegt.
Es liegt in der Verantwortung der Anwendung, einen geeigneten Wert für die maximale Paketgröße auszuwählen, wenn die Paketgröße begrenzt werden soll.
Wildcard-Abonnement verfügbar - Wildcard-Abonnement verfügbar
- 0 - Platzhalterabonnements werden nicht unterstützt.
- 1 - solche Abonnements werden unterstützt.
Wenn die Eigenschaft fehlt, werden Platzhalterabonnements unterstützt.
Wenn der Server Platzhalterabonnements unterstützt, kann er dennoch eine bestimmte Abonnementanforderung ablehnen, die ein Platzhalterabonnement enthält.
Abonnement-ID verfügbar - Abonnement-ID verfügbar
- 0 - Abonnement-IDs werden nicht unterstützt.
- 1 - Abonnement-IDs werden unterstützt.
Wenn die Eigenschaft fehlt, werden Abonnement-IDs unterstützt.
Gemeinsames Abonnement verfügbar - Gemeinsames Abonnement verfügbar
- 0 - allgemeine Abonnements werden nicht unterstützt,
- 1 - Allgemeine Abonnements werden unterstützt.
Wenn die Eigenschaft fehlt, werden allgemeine Abonnements unterstützt.
Fazit
Ich möchte Sie daran erinnern, dass der Artikel geboren wurde, als daran gearbeitet wurde, die oben beschriebenen neuen Funktionen in den Dienst der IoT-Plattform einzubetten. Es schien mir auch sehr praktisch, die Anzeige der vom Client empfangenen Eigenschaften in der Objektschnittstelle anzuzeigen ( mehr über Objekte können Sie hier lesen >>> ). Sie können uninteressante Eigenschaften ausblenden und zusätzliche benutzerdefinierte Eigenschaften zur Anzeige hinzufügen. Im Allgemeinen sieht es so aus. Das ist wahrscheinlich alles. Zum Testen der Funktionalität fand ich dieses Projekt redboltz / mqtt_cpp sehr praktisch und intuitiv . Ich würde mich sehr freuen, wenn Sie in den Kommentaren andere Open-Source-Projekte von MQTT-Clients (sowohl mit als auch ohne GUI) teilen, die Version 5.0 unterstützen.