中文说明
Un client MQTT multiplateforme haute performance et haute stabilité
Un client MQTT multiplateforme hautes performances et haute stabilité, développé sur la base de l'API socket, peut être utilisé sur des appareils embarqués (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny), Linux, Windows, Mac, et dispose d'un très concis L'interface API réalise la qualité de service de QOS2 avec très peu de ressources et connecte de manière transparente la bibliothèque de chiffrement mbedtls.
Stabilité extrêmement élevée : qu'il s'agisse de suppression et de reconnexion , de perte de paquets et de retransmission , il est strictement conforme à la norme du protocole MQTT , en plus du test de gros volume de données est très stable, qu'il s'agisse de réception ou d'envoi, et le test haute fréquence est également très stable.
Léger : L’ensemble du projet de code est extrêmement simple. Sans mbedtls, cela consomme très peu de ressources. L'auteur a utilisé le module esp8266 pour communiquer avec le cloud. L'ensemble du code du projet consomme moins de 15 Ko de RAM.
Prend en charge la transmission cryptée mbedtls , rend la transmission réseau plus sécurisée et la couche d'interface n'exige pas que les utilisateurs s'en soucient, qu'elle soit cryptée ou non, mqttclient est fixé pour l'interface API fournie par l'utilisateur, qui est très compatible Un ensemble des codes au nom de la couche application peuvent être transmis avec ou sans cryptage.
Prend en charge plusieurs clients , compatibles avec plusieurs clients exécutés en même temps, un appareil connecté à plusieurs serveurs.
Prend en charge le traitement synchrone et asynchrone , les applications n'ont pas besoin de se bloquer et d'attendre pour gaspiller les ressources du processeur.
Prise en charge de la configuration de l'intercepteur , sur certaines plates-formes, le client s'abonnera automatiquement au thème système par défaut et le thème du serveur change à chaque fois. Dans ce cas, vous devez utiliser un intercepteur pour intercepter et séparer les informations sur le thème et les données et les transmettre aux utilisateurs, améliorant ainsi considérablement la flexibilité.
Avec l'outil de génération de code en ligne , le code peut être généré avec une configuration extrêmement simple, adresse : https://jiejietop.gitee.io/mqtt/index.html
Possède une interface API très simple , en général, la configuration de mqttclient a des valeurs par défaut, peut essentiellement être utilisée sans configuration, peut également être configurée arbitrairement, la configuration a une détection de robustesse, donc conçue L'interface API est également très simple.
Les paramètres multifonctionnels peuvent être configurés et adaptés , l'intervalle de temps de reconnexion, la période de battement de cœur, le nombre maximum d'abonnements, le délai d'attente des commandes, la taille du tampon de lecture et d'écriture, le traitement de l'intercepteur, etc. Les paramètres peuvent être adaptés et configurables pour répondre aux besoins des développeurs. Complexe et simple à utilisation dans divers environnements de développement.
Prise en charge du réabonnement automatique des sujets , après reconnexion automatique pour garantir que les sujets ne seront pas perdus.
Prise en charge des caractères génériques de thème ""#", "+"` .
Les sujets souscrits sont complètement séparés du traitement des messages , ce qui rend la logique de programmation de plus en plus facile à utiliser, les utilisateurs n'ayant pas à gérer des relations logiques complexes.
Le mécanisme de traitement keep-alive a été implémenté dans mqttclient , sans que l'utilisateur ait à gérer l'expérience psychologique, l'utilisateur n'a qu'à se concentrer sur la fonction de l'application.
A une très bonne conception , a conçu le mécanisme d'enregistrement avec très peu de ressources et retransmet le message en cas de perte pour garantir que les niveaux de qualité de service qos1 et qos2 garantissent la qualité de son service.
Il existe de très bons styles et idées de code : L'ensemble du code adopte une conception en couches et l'implémentation du code adopte l'idée d'un traitement asynchrone pour réduire le couplage et améliorer les performances.
Développé sur le socket BSD standard , à condition qu'il soit compatible avec le système de socket BSD.
Connexion transparente de salof : Il s'agit d'un cadre de sortie de journaux synchrone et asynchrone. Il génère les informations de journal correspondantes lorsqu'il est inactif et peut également écrire les informations dans la mémoire flash pour les enregistrer, ce qui est pratique pour le débogage.
Utilisez le célèbre package de bibliothèque paho mqtt .
Aucune autre dépendance .
Ce projet dispose d'un outil de génération de code qui ne nécessite qu'une configuration en ligne pour générer du code, extrêmement simple et facile à utiliser. L'adresse de l'outil de génération de code est : https://jiejietop.gitee.io/mqtt/index.html
Un total de 10 857 octets de ROM, et la surcharge de RAM dépend presque uniquement de la mémoire dynamique. Sans utiliser la transmission cryptée TLS, la mémoire dynamique de communication qui maintient le niveau de qualité de service QOS0 ne nécessite qu'environ 3 694 octets. Y compris 1 024 tampon de lecture + 1 024 tampon d'écriture + 1 024 taille de pile de threads internes, par rapport aux autres clients MQTT, mqttclient nécessite très peu de ressources RAM.
Code | Données RO | Données RW | Données ZI | Nom de l'objet |
---|---|---|---|---|
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 | réseau.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 | aléatoire.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | total |
A un cadre en couches très clair.
Au sommet du framework se trouve l'interface de fonction API , qui implémente l' application du client, la version, définit les paramètres, se connecte au serveur, se déconnecte, s'abonne au sujet, se désabonne du sujet, publie un message et d'autres interfaces fonctionnelles.
La célèbre bibliothèque paho mqtt est utilisée comme bibliothèque de paquets de messages MQTT.
Un mécanisme de traitement asynchrone est utilisé pour gérer tous les accusés de réception. Il n'a pas besoin d'attendre la réponse du serveur lors de l'envoi du message, mais l'enregistre uniquement. Après avoir reçu l'accusé de réception du serveur, annulez cet enregistrement, très efficace ; et Lorsque le message mqtt (QoS1/QoS2) est envoyé et qu'aucune réponse n'est reçue du serveur, le message sera retransmis .
Un thread de rendement mqtt est implémenté en interne pour gérer tout le contenu de manière unifiée, comme le traitement des délais d'attente, le traitement des messages d'accusé de réception et la réception du message de publication du serveur . À ce moment, la fonction de rappel sera appelée Informer l'utilisateur des données reçues, * après la publication, traitement du message après la fin, message de battement de coeur (rester en vie), lorsque vous êtes déconnecté du serveur, vous devez essayer de vous reconnecter, vous réabonner au sujet, renvoyer le message ou répondre *Attendez.
Traitement des messages, tel que la lecture et l'écriture de messages, le décodage des messages mqtt, la définition des messages (indicateur dup), la destruction des messages et d'autres opérations.
le réseau est un composant réseau qui peut sélectionner automatiquement un canal de données . S'il s'agit d'une méthode de cryptage, le cryptage tls est utilisé pour la transmission des données et tls peut choisir mbedtls comme backend de cryptage ; cela peut également être La méthode de connexion directe TCP est finalement transmise via TCP.
platform est une couche d'abstraction de plate-forme qui encapsule des éléments de différents systèmes, tels que socke ou AT, thread, time, mutex, gestion de la mémoire**, ceux-ci traitent du système et sont également nécessaires pour le package multiplateforme.
À l'extrême droite se trouvent le contenu général, le traitement des listes, la bibliothèque de journaux, la gestion des erreurs, le générateur de nombres aléatoires logiciel , etc.
À l'heure actuelle, les plates-formes Linux, TencentOS tiny, FreeRTOS et RT-Thread ont été implémentées (le progiciel s'appelle kawaii-mqtt`), en plus du framework TencentOS tiny AT peut également être utilisé, et la stabilité est excellente !
Plate-forme | Emplacement du code |
---|---|
Linux | https://github.com/jiejieTop/mqttclient |
TencentOS minuscule | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
TencentOS petit framework AT | https://github.com/jiejieTop/gokit3-board-mqttclient |
Filetage RT | https://github.com/jiejieTop/kawaii-mqtt |
RTOS gratuit | https://github.com/jiejieTop/freertos-mqttclient |
Version de sortie | Description |
---|---|
[v1.0.0] | Version initiale, framework de base complet et vérification de la stabilité |
[v1.0.1] | Correction du traitement logique lors de la déconnexion active du serveur |
[v1.0.2] | Ajouter un nouvel intercepteur de fonctionnalités, corriger quelques petits bugs |
[v1.0.3] | Pour éviter la pollution globale, modifiez le nom des fonctions liées aux journaux et aux listes |
[v1.0.4] | Structure du réseau et canal de données mbedtls réajustés |
[v1.1.0] | Une version plus grande de la mise à jour, refactorisant une partie du code, optimisant la logique du traitement MQTT, améliorant la stabilité globale, prenant en charge plusieurs clients, prenant en charge la définition de la volonté, optimisant l'interface API et ajoutant plusieurs plates-formes cloud Testez le code et la documentation, ajoutez outil de génération de code en ligne, outil de configuration de découpe en ligne |
Bienvenue pour soumettre des problèmes et des rapports de bogues sous la forme de problèmes GitHub
mqttclient suit l'accord open source Apache License v2.0. Encouragez le partage de code et respectez les droits d’auteur de l’auteur original. Vous pouvez librement utiliser et modifier le code source, ou vous pouvez publier le code modifié en tant que logiciel open source ou fermé.
sudo apt-get install cmake g++
Plateforme de tests | Emplacement |
---|---|
emqx (mon serveur déployé en privé) | ./test/emqx/test.c |
Baidu Tiangong | ./test/baidu/test.c |
unnet | ./test/onenet/test.c |
Alibaba Cloud Internet des objets | ./test/ali/test.c |
./build.sh
Après avoir exécuté le script build.sh , les fichiers exécutables emqx , baidu , onenet et d'autres plates-formes seront générés sous le répertoire ./build/bin/. Les programmes exécutables peuvent être exécutés directement.
./build/bin/emqx
./make-libmqttclient.sh
Après avoir exécuté le script make-libmqttclient.sh
, un fichier de bibliothèque dynamique libmqttclient.so
sera généré dans le répertoire ./libmqttclient/lib
et installé dans le répertoire /usr/lib
du système, les fichiers d'en-tête pertinents ont été copiés dans le ./libmqttclient/include
et copiez-le dans votre projet. Il vous suffit de lier la bibliothèque dynamique lors de la compilation de l'application. -lmqttclient -lpthread
, le fichier de configuration de la bibliothèque dynamique est basé sur la configuration ./test/mqtt_config.h
.
Si vous utilisez un compilateur croisé, vous devez exporter les variables d'environnement correspondantes en fonction du compilateur que vous utilisez (le compilateur croisé utilisé ici est arm-linux-gnueabihf-gcc), et vous devez également définir le fichier de bibliothèque dynamique libmqttclient .so
est copié dans le répertoire /usr/lib
de votre système embarqué :
export CROSS_COMPILE=arm-linux-gnueabihf-
Si vous devez désinstaller libmqttclient.so , exécutez la commande suivante :
./make-libmqttclient.sh remove
Veuillez consulter la documentation :
Présentation du protocole MQTT
Processus de communication du protocole MQTT
outil de génération de code mqttclient
outil de configuration et de coupe mqttclient
conception et implémentation du client mqtt
mqttclient se connecte à Baidu Tiangongwu Accès
mqttclient se connecte à la plateforme cloud OneNET
mqttclient se connecte à la plateforme Alibaba Cloud IoT