中文说明
Ein leistungsstarker, hochstabiler und plattformübergreifender MQTT-Client
Ein leistungsstarker, hochstabiler, plattformübergreifender MQTT-Client, der auf Basis der Socket-API entwickelt wurde, kann auf eingebetteten Geräten (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny), Linux, Windows, Mac verwendet werden und verfügt über eine sehr prägnant Die API-Schnittstelle realisiert die Servicequalität von QOS2 mit sehr wenigen Ressourcen und verbindet die mbedtls-Verschlüsselungsbibliothek nahtlos.
Extrem hohe Stabilität : Unabhängig davon, ob es sich um Drop-and-Reconnect , Paketverlust und erneute Übertragung handelt, wird der MQTT-Protokollstandard strikt eingehalten . Darüber hinaus ist der Test großer Datenmengen beim Empfangen oder Senden sehr stabil und der Hochfrequenztest ist auch sehr stabil.
Leicht : Das gesamte Codeprojekt ist äußerst einfach. Ohne mbedtls beansprucht es nur sehr wenige Ressourcen. Der Autor nutzte das Modul esp8266, um mit der Cloud zu kommunizieren. Der gesamte Projektcode verbraucht weniger als 15 KB RAM.
Unterstützen Sie die verschlüsselte Übertragung von mbedtls , machen Sie die Netzwerkübertragung sicherer, und die Schnittstellenschicht erfordert keine Sorge des Benutzers. Unabhängig davon, ob sie verschlüsselt ist oder nicht, ist mqttclient für die vom Benutzer bereitgestellte API-Schnittstelle festgelegt , die sehr kompatibel ist. Ein Satz Anzahl der Codes im Auftrag der Anwendungsschicht können mit oder ohne Verschlüsselung übertragen werden.
Unterstützt mehrere Clients , kompatibel mit mehreren gleichzeitig laufenden Clients, ein Gerät ist mit mehreren Servern verbunden.
Unterstützt synchrone und asynchrone Verarbeitung , Anwendungen müssen nicht blockieren und warten, um CPU-Ressourcen zu verschwenden.
Unterstützen Sie die Interceptor-Konfiguration . Auf einigen Plattformen abonniert der Client standardmäßig automatisch das Systemthema, und das Thema vom Server ändert sich jedes Mal. In diesem Fall müssen Sie einen Interceptor verwenden, um das Thema und die Dateninformationen abzufangen, zu trennen und an Benutzer zu liefern, was die Flexibilität erheblich verbessert.
Mit dem Online-Codegenerierungstool kann der Code mit extrem einfacher Konfiguration generiert werden, Adresse: https://jiejietop.gitee.io/mqtt/index.html
Verfügt über eine sehr einfache API-Schnittstelle . Im Allgemeinen hat die mqttclient-Konfiguration Standardwerte, kann grundsätzlich ohne Konfiguration verwendet werden und kann auch beliebig konfiguriert werden. Die Konfiguration verfügt über eine Robustheitserkennung und ist daher so gestaltet. Die API-Schnittstelle ist ebenfalls sehr einfach.
Multifunktionale Parameter können konfiguriert und angepasst werden : Wiederverbindungszeitintervall, Heartbeat-Zeitraum, maximale Anzahl von Abonnements, Befehls-Timeout, Lese- und Schreibpuffergröße, Interceptor-Verarbeitung usw. Parameter können angepasst und konfiguriert werden, um den Anforderungen von Entwicklern gerecht zu werden. Komplex und einfach Einsatz in verschiedenen Entwicklungsumgebungen.
Unterstützen Sie das automatische erneute Abonnieren von Themen nach der automatischen erneuten Verbindung, um sicherzustellen, dass die Themen nicht verloren gehen.
Unterstützt Theme-Wildcards „#“, „+“` .
Abonnierte Themen sind vollständig von der Nachrichtenverarbeitung getrennt , wodurch die Programmierlogik einfacher und benutzerfreundlicher wird und Benutzer sich nicht mit komplizierten logischen Beziehungen auseinandersetzen müssen.
Der Keep-Alive-Verarbeitungsmechanismus wurde in mqttclient implementiert . Der Benutzer muss sich nicht mit der psychologischen Erfahrung befassen, sondern muss sich nur auf die Anwendungsfunktion konzentrieren.
Hat ein sehr gutes Design , hat den Aufzeichnungsmechanismus mit sehr wenigen Ressourcen entworfen und überträgt die Nachricht erneut, wenn sie verloren geht, um sicherzustellen, dass die Dienstqualitätsstufen qos1 und qos2 seine Dienstqualität garantieren.
Es gibt sehr gute Codestile und -ideen : Der gesamte Code verwendet ein mehrschichtiges Design, und die Codeimplementierung übernimmt die Idee der asynchronen Verarbeitung, um die Kopplung zu reduzieren und die Leistung zu verbessern.
Entwickelt auf Basis des Standard-BSD-Sockels , sofern er mit dem BSD-Sockelsystem kompatibel ist.
Nahtlose Verbindung von Salof : Es handelt sich um ein synchrones und asynchrones Protokollausgabe-Framework. Es gibt die entsprechenden Protokollinformationen aus, wenn es inaktiv ist, und kann die Informationen auch in Flash schreiben, um sie zu speichern, was für das Debuggen praktisch ist.
Verwenden Sie das berühmte Paho MQTT-Bibliothekspaket .
Keine weiteren Abhängigkeiten .
Dieses Projekt verfügt über ein Codegenerierungstool, das zum Generieren von Code nur eine Online-Konfiguration erfordert, was äußerst einfach und benutzerfreundlich ist. Die Adresse des Codegenerierungstools lautet: https://jiejietop.gitee.io/mqtt/index.html
Insgesamt 10857 Byte ROM, und der RAM-Overhead hängt fast nur vom dynamischen Speicher ab. Ohne die Verwendung einer TLS-verschlüsselten Übertragung benötigt der dynamische Kommunikationsspeicher, der die Servicequalitätsebene QOS0 aufrechterhält, nur etwa 3694 Bytes. Mit 1024 Lesepuffern + 1024 Schreibpuffern + 1024 internen Thread-Stapelgrößen benötigt mqttclient im Vergleich zu anderen MQTT-Clients nur sehr wenig RAM-Ressourcen-Overhead.
Code | RO-Daten | RW-Daten | ZI-Daten | Objektname |
---|---|---|---|---|
7118 | 791 | 0 | 0 | mqttclient.o |
546 | 0 | 0 | 0 | mqttconnectclient.o |
212 | 0 | 0 | 0 | mqttdeserializepublish.o |
476 | 0 | 4 | 0 | mqttpacket.o |
236 | 0 | 0 | 0 | mqttserializepublish.o |
310 | 0 | 0 | 0 | mqttsubscribeclient.o |
38 | 0 | 0 | 0 | mqttunsubscribeclient.o |
56 | 0 | 0 | 0 | nettype_tcp.o |
62 | 0 | 0 | 0 | Netzwerk.o |
24 | 0 | 0 | 0 | platform_memory.o |
40 | 0 | 0 | 0 | platform_mutex.o |
344 | 0 | 0 | 0 | platform_net_socket.o |
94 | 0 | 0 | 0 | platform_thread.o |
70 | 0 | 0 | 0 | platform_timer.o |
246 | 0 | 4 | 0 | zufällig.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | gesamt |
Hat ein sehr klares Schichtgerüst.
An der Spitze des Frameworks befindet sich die API -Funktionsschnittstelle, die die Anwendung des Clients implementiert, freigibt, Parameter festlegt, eine Verbindung zum Server herstellt, die Verbindung trennt, ein Thema abonniert, ein Thema abbestellt, eine Nachricht veröffentlicht und andere funktionale Schnittstellen implementiert.
Als MQTT-Nachrichtenpaketbibliothek wird die berühmte Paho-MQTT- Bibliothek verwendet.
Zur Verwaltung aller Bestätigungen wird ein asynchroner Verarbeitungsmechanismus verwendet. Es muss beim Senden der Nachricht nicht auf die Antwort des Servers warten, sondern zeichnet diese nur auf. Löschen Sie diesen Datensatz, nachdem Sie die Bestätigung des Servers erhalten haben. Dies ist sehr effizient . und Wenn die MQTT-Nachricht (QoS1/QoS2) gesendet wird und keine Antwort vom Server empfangen wird, wird die Nachricht erneut übertragen .
Ein MQTT- Ertragsthread ist intern implementiert, um den gesamten Inhalt einheitlich zu verarbeiten, z. B. die Verarbeitung von Zeitüberschreitungen, die Verarbeitung von Bestätigungsnachrichten und den Empfang von Veröffentlichungsnachrichten vom Server . Zu diesem Zeitpunkt wird die Rückruffunktion aufgerufen. Informieren Sie den Benutzer über die empfangenen Daten. * Post-Release, Post-Completion-Nachrichtenverarbeitung, Heartbeat-Nachricht (Keep Alive). Wenn die Verbindung zum Server getrennt wird, müssen Sie versuchen, die Verbindung wiederherzustellen, das Thema erneut zu abonnieren, die Nachricht erneut zu senden oder zu antworten *Warten.
Nachrichtenverarbeitung, z. B. Lesen und Schreiben von Nachrichten, Dekodieren von MQTT-Nachrichten, Setzen von Nachrichten (Dup-Flag), Zerstören von Nachrichten und andere Vorgänge.
Netzwerk ist eine Netzwerkkomponente, die automatisch einen Datenkanal auswählen kann. Wenn es sich um eine Verschlüsselungsmethode handelt, wird TLS-Verschlüsselung für die Datenübertragung verwendet und TLS kann MBEDTLS als Verschlüsselungs-Backend auswählen. Es kann auch sein, dass die TCP-Direktverbindungsmethode letztendlich über TCP übertragen wird.
Plattform ist eine Plattformabstraktionsschicht, die Dinge aus verschiedenen Systemen kapselt, wie z. B. Socke oder AT, Thread, Zeit, Mutex, Speicherverwaltung**, diese kümmern sich um das System und sind auch für plattformübergreifende Pakete erforderlich.
Ganz rechts befinden sich der allgemeine Inhalt, die Listenverarbeitung, die Protokollbibliothek, die Fehlerbehandlung, der Software-Zufallszahlengenerator usw.
Derzeit sind die Plattformen Linux, TencentOS tiny, FreeRTOS und RT-Thread implementiert (das Softwarepaket heißt kawaii-mqtt`). Zusätzlich zum TencentOS tiny AT-Framework kann auch das AT-Framework verwendet werden, und die Stabilität ist ausgezeichnet!
Plattform | Code-Speicherort |
---|---|
Linux | https://github.com/jiejieTop/mqttclient |
TencentOS winzig | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
TencentOS winziges AT-Framework | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-Thread | https://github.com/jiejieTop/kawaii-mqtt |
FreeRTOS | https://github.com/jiejieTop/freertos-mqttclient |
Release-Version | Beschreibung |
---|---|
[v1.0.0] | Erstveröffentlichung, vollständiges Grundgerüst und Stabilitätsüberprüfung |
[v1.0.1] | Korrigieren Sie die logische Verarbeitung beim aktiven Trennen der Verbindung zum Server |
[v1.0.2] | Fügen Sie einen neuen Feature-Interceptor hinzu und beheben Sie einige kleine Fehler |
[v1.0.3] | Um eine globale Verschmutzung zu vermeiden, ändern Sie die Benennung protokoll- und listenbezogener Funktionen |
[v1.0.4] | Netzwerkstruktur und mbedtls-Datenkanal neu angepasst |
[v1.1.0] | Eine größere Version des Updates, die Umgestaltung eines Teils des Codes, die Optimierung der Logik der MQTT-Verarbeitung, die Verbesserung der Gesamtstabilität, die Unterstützung mehrerer Clients, die Unterstützung beim Festlegen des Willens, die Optimierung der API-Schnittstelle und das Hinzufügen mehrerer Cloud-Plattformen. Testcode und Dokumentation hinzufügen Online-Tool zur Codegenerierung, Online-Tool zur Schnittkonfiguration |
Willkommen beim Einreichen von Problemen und Fehlerberichten in Form von GitHub-Problemen
mqttclient befolgt die Open-Source-Vereinbarung Apache License v2.0. Fördern Sie die gemeinsame Nutzung von Code und respektieren Sie das Urheberrecht des ursprünglichen Autors. Sie können den Quellcode frei verwenden und ändern oder den geänderten Code als Open-Source- oder Closed-Source-Software veröffentlichen.
sudo apt-get install cmake g++
Testplattform | Standort |
---|---|
emqx (mein privat bereitgestellter Server) | ./test/emqx/test.c |
Baidu Tiangong | ./test/baidu/test.c |
onenet | ./test/onenet/test.c |
Alibaba Cloud Internet der Dinge | ./test/ali/test.c |
./build.sh
Nach dem Ausführen des build.sh -Skripts werden die ausführbaren Dateien emqx , baidu , onenet und andere Plattformen im Verzeichnis ./build/bin/ generiert. Ausführbare Programme können direkt ausgeführt werden.
./build/bin/emqx
./make-libmqttclient.sh
Nach dem Ausführen des Skripts make-libmqttclient.sh
wird eine dynamische Bibliotheksdatei libmqttclient.so
im Verzeichnis ./libmqttclient/lib
generiert und im Verzeichnis /usr/lib
des Systems installiert. Die relevanten Header-Dateien wurden in das Verzeichnis kopiert ./libmqttclient/include
Verzeichnis ./libmqttclient/include
und kopieren Sie es in Ihr Projekt. Sie müssen die dynamische Bibliothek nur beim Kompilieren der Anwendung verknüpfen. -lmqttclient -lpthread
, die Konfigurationsdatei der dynamischen Bibliothek basiert auf der Konfiguration ./test/mqtt_config.h
.
Wenn Sie einen Cross-Compiler verwenden, sollten Sie die entsprechenden Umgebungsvariablen entsprechend dem von Ihnen verwendeten Compiler exportieren (der hier verwendete Cross-Compiler ist arm-linux-gnueabihf-gcc) und Sie müssen auch die dynamische Bibliotheksdatei libmqttclient .so
festlegen libmqttclient .so
wird in das Verzeichnis /usr/lib
Ihres eingebetteten Systems kopiert:
export CROSS_COMPILE=arm-linux-gnueabihf-
Wenn Sie libmqttclient.so deinstallieren müssen, führen Sie den folgenden Befehl aus:
./make-libmqttclient.sh remove
Bitte beachten Sie die Dokumentation:
Einführung in das MQTT-Protokoll
Kommunikationsprozess des MQTT-Protokolls
mqttclient-Codegenerierungstool
mqttclient-Konfigurations- und Schneidwerkzeug
mqttclient-Design und -Implementierung
mqttclient stellt eine Verbindung zu Baidu Tiangongwu Access her
mqttclient stellt eine Verbindung zur OneNET-Cloud-Plattform her
mqttclient stellt eine Verbindung zur Alibaba Cloud IoT-Plattform her