中文说明
Un cliente MQTT multiplataforma, de alto rendimiento y alta estabilidad
Un cliente MQTT multiplataforma de alto rendimiento, alta estabilidad, desarrollado en base a la API de socket, se puede utilizar en dispositivos integrados (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny), Linux, Windows, Mac y tiene una muy conciso La interfaz API logra la calidad de servicio de QOS2 con muy pocos recursos y conecta perfectamente la biblioteca de cifrado mbedtls.
Estabilidad extremadamente alta : ya sea que se trate de caída y reconexión , pérdida de paquetes y retransmisión , se cumple estrictamente con el estándar del protocolo MQTT , además de que la prueba de gran volumen de datos es muy estable ya sea que se reciba o envíe, y la prueba de alta frecuencia También es muy estable.
Ligero : todo el proyecto de código es extremadamente simple. Sin mbedtls, se necesitan muy pocos recursos. El autor utilizó el módulo esp8266 para comunicarse con la nube. Todo el código del proyecto consume menos de 15k de RAM.
Admite la transmisión cifrada mbedtls , hace que la transmisión de la red sea más segura y la capa de interfaz no requiere que los usuarios se preocupen, ya sea que esté cifrada o no, mqttclient es fijo para la interfaz API proporcionada por el usuario, que es muy compatible. Los códigos en nombre de la capa de aplicación se pueden transmitir con o sin cifrado.
Admite múltiples clientes , compatible con múltiples clientes ejecutándose al mismo tiempo, un dispositivo conectado a múltiples servidores.
Admite procesamiento sincrónico y asincrónico , las aplicaciones no necesitan bloquearse ni esperar para desperdiciar recursos de la CPU.
Admite configuración de interceptor . En algunas plataformas, el cliente se suscribirá automáticamente al tema del sistema de forma predeterminada y el tema del servidor cambia cada vez. En este caso, es necesario utilizar un interceptor para interceptar y separar la información del tema y los datos y entregarla a los usuarios, lo que mejora enormemente la flexibilidad.
Con la herramienta de generación de código en línea , el código se puede generar con una configuración extremadamente simple, dirección: https://jiejietop.gitee.io/mqtt/index.html
Tiene una interfaz API muy simple , en general, la configuración de mqttclient tiene valores predeterminados, básicamente se puede usar sin configuración, también se puede configurar arbitrariamente, la configuración tiene detección de robustez, por lo que la interfaz API diseñada también es muy simple.
Los parámetros multifuncionales se pueden configurar y adaptar , intervalo de tiempo de reconexión, período de latido, número máximo de suscripciones, tiempo de espera de comando, tamaño del búfer de lectura y escritura, procesamiento de interceptor, etc. Los parámetros se pueden adaptar y configurar para satisfacer las necesidades de los desarrolladores. Complejos y simples de uso en diversos entornos de desarrollo.
Admite la resuscripción automática de temas , después de la reconexión automática para garantizar que los temas no se pierdan.
Admite comodines de tema ""#", "+"` .
Los temas suscritos están completamente separados del procesamiento de mensajes , lo que hace que la lógica de programación sea cada vez más fácil de usar y los usuarios no tienen que lidiar con relaciones lógicas intrincadas.
El mecanismo de procesamiento keep-alive se ha implementado en mqttclient , sin que el usuario tenga que lidiar con la experiencia psicológica, el usuario solo necesita concentrarse en la función de la aplicación.
Tiene un muy buen diseño , diseñó el mecanismo de grabación con muy pocos recursos y retransmite el mensaje cuando se pierde para garantizar que los niveles de calidad del servicio qos1 y qos2 garanticen la calidad del servicio.
Hay muy buenos estilos e ideas de código : todo el código adopta un diseño en capas y la implementación del código adopta la idea de procesamiento asincrónico para reducir el acoplamiento y mejorar el rendimiento.
Desarrollado sobre el zócalo BSD estándar , siempre que sea compatible con el sistema de zócalo BSD.
Conexión perfecta de salof : es un marco de salida de registros sincrónico y asincrónico. Genera la información de registro correspondiente cuando está inactivo y también puede escribir la información en la memoria flash para guardarla, lo cual es conveniente para la depuración.
Utilice el famoso paquete de biblioteca paho mqtt .
Ninguna otra dependencia .
Este proyecto cuenta con una herramienta de generación de código que solo requiere configuración en línea para generar código, la cual es extremadamente simple y fácil de usar. La dirección de la herramienta de generación de código es: https://jiejietop.gitee.io/mqtt/index.html
Un total de 10857 bytes de ROM y la sobrecarga de RAM depende casi únicamente de la memoria dinámica. Sin utilizar la transmisión cifrada TLS, la memoria dinámica de comunicación que mantiene el nivel de calidad de servicio QOS0 requiere solo alrededor de 3694 bytes. Incluyendo 1024 buffer de lectura + 1024 buffer de escritura + 1024 tamaño de pila de subprocesos internos, en comparación con otros clientes MQTT, mqttclient requiere muy poca sobrecarga de recursos de RAM.
Código | Datos de RO | Datos RW | Datos ZI | Nombre del objeto |
---|---|---|---|---|
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 | red.o |
24 | 0 | 0 | 0 | plataforma_memoria.o |
40 | 0 | 0 | 0 | plataforma_mutex.o |
344 | 0 | 0 | 0 | plataforma_net_socket.o |
94 | 0 | 0 | 0 | plataforma_thread.o |
70 | 0 | 0 | 0 | plataforma_timer.o |
246 | 0 | 4 | 0 | aleatorio.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | total |
Tiene un marco en capas muy claro.
En la parte superior del marco se encuentra la interfaz de función API , que implementa la aplicación del cliente, la libera, establece parámetros, se conecta al servidor, se desconecta, suscribe un tema, cancela la suscripción a un tema, publica mensajes y otras interfaces funcionales.
La famosa biblioteca paho mqtt se utiliza como biblioteca de paquetes de mensajes MQTT.
Se utiliza un mecanismo de procesamiento asincrónico para gestionar todos los ataques. No necesita esperar la respuesta del servidor al enviar el mensaje, solo lo registra. Después de recibir el reconocimiento del servidor, cancele este registro, muy eficiente ; y Cuando se envía el mensaje mqtt (QoS1/QoS2) y no se recibe respuesta del servidor, el mensaje se retransmitirá .
Se implementa internamente un hilo de rendimiento mqtt para manejar todo el contenido de manera unificada, como el procesamiento de tiempo de espera, el procesamiento de mensajes de confirmación y la recepción de mensajes de publicación del servidor . En este momento se llamará a la función de devolución de llamada para informar al usuario de los datos recibidos. * publicación posterior, procesamiento de mensajes posteriores a la finalización, mensaje de latido (mantener vivo), cuando se desconecta del servidor, debe intentar volver a conectarse, volver a suscribirse al tema, reenviar el mensaje o responder *Espera.
Procesamiento de mensajes, como leer y escribir mensajes, decodificar mensajes mqtt, configurar mensajes (indicador dup), destruir mensajes y otras operaciones.
la red es un componente de la red que puede seleccionar automáticamente un canal de datos . Si es un método de cifrado, el cifrado tls se utiliza para la transmisión de datos y tls puede elegir mbedtls como backend de cifrado; también puede ser El método de conexión directa tcp se transmite finalmente a través de tcp.
La plataforma es una capa de abstracción de plataforma que encapsula cosas de diferentes sistemas, como socke o AT, subprocesos, tiempo, mutex, administración de memoria **, estos se ocupan del sistema y también son necesarios para paquetes multiplataforma.
En el extremo derecho está el contenido general, el procesamiento de listas, la biblioteca de registros, el manejo de errores, el software generador de números aleatorios , etc.
En la actualidad, se han implementado plataformas Linux, TencentOS tiny, FreeRTOS y RT-Thread (el paquete de software se llama kawaii-mqtt`). Además del marco TencentOS tiny AT, también se puede usar y ¡la estabilidad es excelente!
Plataforma | Ubicación del código |
---|---|
linux | https://github.com/jiejieTop/mqttclient |
TencentOS diminuto | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
Pequeño marco AT de TencentOS | https://github.com/jiejieTop/gokit3-board-mqttclient |
Hilo RT | https://github.com/jiejieTop/kawaii-mqtt |
RTOS gratuitos | https://github.com/jiejieTop/freertos-mqttclient |
Versión de lanzamiento | Descripción |
---|---|
[v1.0.0] | Lanzamiento inicial, marco básico completo y verificación de estabilidad. |
[v1.0.1] | Reparar el procesamiento lógico al desconectarse activamente del servidor |
[v1.0.2] | Agregue un nuevo interceptor de funciones y corrija algunos errores pequeños |
[v1.0.3] | Para evitar la contaminación global, modifique el nombre de las funciones relacionadas con el registro y la lista. |
[v1.0.4] | Estructura de red y canal de datos mbedtls reajustados |
[v1.1.0] | Una versión más grande de la actualización, refactorizando parte del código, optimizando la lógica del procesamiento MQTT, mejorando la estabilidad general, admitiendo múltiples clientes, admitiendo la configuración de voluntad, optimizando la interfaz API y agregando múltiples plataformas en la nube Código de prueba y documentación, agregue herramienta de generación de código en línea, herramienta de configuración de corte en línea |
Bienvenido a enviar problemas e informes de errores en forma de problemas de GitHub.
mqttclient sigue el acuerdo de código abierto de la licencia Apache v2.0. Fomente el intercambio de códigos y respete los derechos de autor del autor original. Puede utilizar y modificar libremente el código fuente, o puede publicar el código modificado como software de código abierto o de código cerrado.
sudo apt-get install cmake g++
Plataforma de prueba | Ubicación |
---|---|
emqx (mi servidor implementado de forma privada) | ./test/emqx/test.c |
Baidu Tiangong | ./test/baidu/test.c |
onenet | ./test/onenet/test.c |
Internet de las cosas en la nube de Alibaba | ./test/ali/test.c |
./build.sh
Después de ejecutar el script build.sh , los archivos ejecutables emqx , baidu , onenet y otras plataformas se generarán en el directorio ./build/bin/. Los programas ejecutables se pueden ejecutar directamente.
./build/bin/emqx
./make-libmqttclient.sh
Después de ejecutar el script make-libmqttclient.sh
, se generará un archivo de biblioteca dinámica libmqttclient.so
en el directorio ./libmqttclient/lib
y se instalará en el directorio /usr/lib
del sistema; los archivos de encabezado relevantes se copiarán en el archivo ./libmqttclient/include
directorio y cópielo a su proyecto. Solo necesita vincular la biblioteca dinámica al compilar la aplicación. -lmqttclient -lpthread
, el archivo de configuración de la biblioteca dinámica se basa en la configuración ./test/mqtt_config.h
.
Si está utilizando un compilador cruzado, debe exportar las variables de entorno correspondientes de acuerdo con el compilador que esté utilizando (el compilador cruzado utilizado aquí es arm-linux-gnueabihf-gcc) y también debe configurar el archivo de biblioteca dinámica libmqttclient .so
se copia en el directorio /usr/lib
de su sistema integrado:
export CROSS_COMPILE=arm-linux-gnueabihf-
Si necesita desinstalar libmqttclient.so , ejecute el siguiente comando:
./make-libmqttclient.sh remove
Por favor consulte la documentación:
Introducción al protocolo MQTT
Proceso de comunicación del protocolo MQTT
herramienta de generación de código mqttclient
herramienta de corte y configuración mqttclient
Diseño e implementación de mqttclient.
mqttclient se conecta a Baidu Tiangongwu Access
mqttclient se conecta a la plataforma en la nube OneNET
mqttclient se conecta a la plataforma Alibaba Cloud IoT