中文说明
Um cliente MQTT multiplataforma de alto desempenho e alta estabilidade
Um cliente MQTT de plataforma cruzada de alto desempenho e alta estabilidade, desenvolvido com base na API de soquete, pode ser usado em dispositivos embarcados (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny), Linux, Windows, Mac e tem um muito conciso A interface API realiza a qualidade de serviço do QOS2 com muito poucos recursos e conecta perfeitamente a biblioteca de criptografia mbedtls.
Estabilidade extremamente alta : seja queda e reconexão , perda e retransmissão de pacotes , ele obedece estritamente ao padrão do protocolo MQTT , além de O teste de grande volume de dados é muito estável, seja recebendo ou enviando, e o teste de alta frequência também é muito estável.
Leve : todo o projeto de código é extremamente simples. Sem mbedtls, são necessários poucos recursos. O autor utilizou o módulo esp8266 para se comunicar com a nuvem. Todo o código do projeto consome menos de 15k de RAM.
Suporta transmissão criptografada mbedtls , torna a transmissão da rede mais segura e a camada de interface não exige que os usuários se preocupem, não importa se é criptografada ou não, mqttclient é corrigido para a interface API fornecida pelo usuário, que é muito compatível Um conjunto de códigos em nome da camada de aplicação podem ser transmitidos com ou sem criptografia.
Suporta vários clientes , compatível com vários clientes rodando ao mesmo tempo, um dispositivo conectado a vários servidores.
Suporta processamento síncrono e assíncrono , os aplicativos não precisam bloquear e esperar para desperdiçar recursos da CPU.
Suporte à configuração do interceptador , em algumas plataformas, o cliente se inscreverá automaticamente no tema do sistema por padrão, e o tema do servidor muda sempre. Nesse caso, é necessário utilizar um interceptador para interceptar e separar as informações do tema e dos dados e entregá-las aos usuários, melhorando bastante a flexibilidade.
Com a ferramenta de geração de código online , o código pode ser gerado com configuração extremamente simples, endereço: https://jiejietop.gitee.io/mqtt/index.html
Possui uma interface API muito simples , em geral, a configuração do mqttclient possui valores padrão, basicamente pode ser usada sem configuração, também pode ser configurada arbitrariamente, a configuração possui detecção de robustez, portanto projetada A interface API também é muito simples.
Parâmetros multifuncionais podem ser configurados e adaptados , intervalo de tempo de reconexão, período de pulsação, número máximo de assinaturas, tempo limite de comando, tamanho do buffer de leitura e gravação, processamento de interceptador, etc. uso em vários ambientes de desenvolvimento.
Suporta nova assinatura automática de tópicos , após reconexão automática para garantir que os tópicos não serão perdidos.
Suporta curingas de tema ""#", "+"` .
Os tópicos assinados são completamente separados do processamento de mensagens , tornando a lógica de programação cada vez mais fácil de usar, os usuários não precisam lidar com relacionamentos lógicos intrincados.
O mecanismo de processamento keep-alive foi implementado no mqttclient , sem que o usuário tenha que lidar com a experiência psicológica, o usuário só precisa se concentrar na função do aplicativo.
Tem um design muito bom , desenhou o mecanismo de gravação com pouquíssimos recursos, e retransmite a mensagem quando esta é perdida para garantir que os níveis de qualidade de serviço qos1 e qos2 garantam sua qualidade de serviço.
Existem estilos e ideias de código muito bons : todo o código adota um design em camadas e a implementação do código adota a ideia de processamento assíncrono para reduzir o acoplamento e melhorar o desempenho.
Desenvolvido sobre o soquete BSD padrão , desde que seja compatível com o sistema de soquete BSD.
Conexão perfeita de salof : é uma estrutura de saída de log síncrona e assíncrona. Ele gera as informações de log correspondentes quando está ocioso e também pode gravar as informações em flash para salvá-las, o que é conveniente para depuração.
Use o famoso pacote da biblioteca paho mqtt .
Nenhuma outra dependência .
Este projeto possui uma ferramenta de geração de código que requer apenas configuração online para gerar código, que é extremamente simples e fácil de usar. O endereço da ferramenta de geração de código é: https://jiejietop.gitee.io/mqtt/index.html
Um total de 10.857 bytes de ROM, e a sobrecarga de RAM depende quase apenas da memória dinâmica. Sem usar a transmissão criptografada TLS, a memória dinâmica de comunicação que mantém o nível de qualidade de serviço QOS0 requer apenas cerca de 3694 bytes. Incluindo 1.024 buffer de leitura + 1.024 buffer de gravação + 1.024 tamanho de pilha de encadeamento interno, em comparação com outros clientes MQTT, o mqttclient requer muito pouca sobrecarga de recursos de RAM.
Código | Dados RO | Dados RW | Dados ZI | Nome do 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 | rede.o |
24 | 0 | 0 | 0 | plataforma_memory.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 | platform_timer.o |
246 | 0 | 4 | 0 | aleatório.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | total |
Possui uma estrutura em camadas muito clara.
No topo da estrutura está a interface de função API , que implementa a aplicação do cliente, libera, define parâmetros, conecta-se ao servidor, desconecta, assina tópico, cancela assinatura, publica mensagem e outras interfaces funcionais.
A famosa biblioteca paho mqtt é usada como biblioteca de pacotes de mensagens MQTT.
O mecanismo de processamento assíncrono é usado para gerenciar todas as confirmações. Não precisa esperar a resposta do servidor ao enviar a mensagem, apenas a registra. Após receber o ack do servidor, cancele esse registro, muito eficiente ; e Quando a mensagem mqtt (QoS1/QoS2) for enviada e nenhuma resposta for recebida do servidor, a mensagem será retransmitida .
Um thread de rendimento mqtt é implementado internamente para lidar com todo o conteúdo de maneira unificada, como processamento de tempo limite, processamento de mensagem de confirmação e recebimento de mensagem de publicação do servidor , neste momento a função de retorno de chamada será chamada Informar o usuário sobre os dados recebidos, * pós-liberação, processamento de mensagem pós-conclusão, mensagem de heartbeat (keep alive), quando desconectado do servidor, você precisa tentar reconectar, assinar novamente o tópico, reenviar a mensagem ou responder *Aguarde.
Processamento de mensagens, como leitura e gravação de mensagens, decodificação de mensagens mqtt, configuração de mensagens (sinalizador dup), destruição de mensagens e outras operações.
rede é um componente de rede que pode selecionar automaticamente um canal de dados . Se for um método de criptografia, a criptografia tls é usada para transmissão de dados e o tls pode escolher mbedtls como back-end de criptografia; também pode ser O método de conexão direta tcp é finalmente transmitido via tcp.
plataforma é uma camada de abstração de plataforma que encapsula coisas de diferentes sistemas, como socke ou AT, thread, time, mutex, gerenciamento de memória**, estes lidam com o sistema e também são necessários para pacotes multiplataforma.
Na extrema direita está o conteúdo geral, processamento de lista, biblioteca de log, tratamento de erros, software gerador de números aleatórios , etc.
Atualmente, as plataformas Linux, TencentOS tiny, FreeRTOS, RT-Thread foram implementadas (o pacote de software é denominado kawaii-mqtt`), além do framework TencentOS tiny AT também pode ser usado, e a estabilidade é excelente!
Plataforma | Localização do código |
---|---|
Linux | https://github.com/jiejieTop/mqttclient |
TencentOS minúsculo | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
Estrutura AT minúscula do TencentOS | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-Thread | https://github.com/jiejieTop/kawaii-mqtt |
RTOS grátis | https://github.com/jiejieTop/freertos-mqttclient |
Versão de lançamento | Descrição |
---|---|
[v1.0.0] | Lançamento inicial, estrutura básica completa e verificação de estabilidade |
[v1.0.1] | Corrija o processamento lógico ao desconectar ativamente do servidor |
[v1.0.2] | Adicione um novo interceptador de recursos, corrija alguns pequenos bugs |
[v1.0.3] | Para evitar a poluição global, modifique a nomenclatura das funções relacionadas ao log e à lista |
[v1.0.4] | Estrutura de rede e canal de dados mbedtls reajustados |
[v1.1.0] | Uma versão maior da atualização, refatorando parte do código, otimizando a lógica do processamento MQTT, melhorando a estabilidade geral, suportando vários clientes, apoiando a configuração da vontade, otimizando a interface da API e adicionando várias plataformas em nuvem Teste o código e a documentação, adicione ferramenta de geração de código online, ferramenta de configuração de corte online |
Bem-vindo ao enviar problemas e relatórios de bugs na forma de problemas do GitHub
mqttclient segue o contrato de código aberto Apache License v2.0. Incentive o compartilhamento de código e respeite os direitos autorais do autor original. Você pode usar e modificar livremente o código-fonte ou pode publicar o código modificado como software de código aberto ou de código fechado.
sudo apt-get install cmake g++
Plataforma de teste | Localização |
---|---|
emqx (meu servidor implantado de forma privada) | ./test/emqx/test.c |
Baidu Tiangong | ./test/baidu/test.c |
onenet | ./test/onenet/test.c |
Alibaba Cloud Internet das Coisas | ./test/ali/test.c |
./build.sh
Depois de executar o script build.sh , os arquivos executáveis emqx , baidu , onenet e outras plataformas serão gerados no diretório ./build/bin/. Os programas executáveis podem ser executados diretamente.
./build/bin/emqx
./make-libmqttclient.sh
Depois de executar o script make-libmqttclient.sh
, um arquivo de biblioteca dinâmica libmqttclient.so
será gerado no diretório ./libmqttclient/lib
e instalado no diretório /usr/lib
do sistema, os arquivos de cabeçalho relevantes foram copiados para o arquivo ./libmqttclient/include
e copie-o para o seu projeto. Você só precisa vincular a biblioteca dinâmica ao compilar o aplicativo. -lmqttclient -lpthread
, o arquivo de configuração da biblioteca dinâmica é baseado na configuração ./test/mqtt_config.h
.
Se você estiver usando um compilador cruzado, você deve exportar as variáveis de ambiente correspondentes de acordo com o compilador que você está usando (o compilador cruzado usado aqui é arm-linux-gnueabihf-gcc), e você também deve definir o arquivo de biblioteca dinâmica libmqttclient .so
é copiado para o diretório /usr/lib
do seu sistema embarcado:
export CROSS_COMPILE=arm-linux-gnueabihf-
Se você precisar desinstalar libmqttclient.so , execute o seguinte comando:
./make-libmqttclient.sh remove
Por favor, veja a documentação:
Introdução ao protocolo MQTT
Processo de comunicação do protocolo MQTT
ferramenta de geração de código mqttclient
ferramenta de configuração e corte mqttclient
design e implementação do mqttclient
mqttclient se conecta ao acesso Baidu Tiangongwu
mqttclient se conecta à plataforma de nuvem OneNET
mqttclient se conecta à plataforma Alibaba Cloud IoT