중국어 설명
고성능, 높은 안정성, 크로스 플랫폼 MQTT 클라이언트
소켓 API를 기반으로 개발된 고성능, 고안정성, 크로스 플랫폼 MQTT 클라이언트는 임베디드 장치(FreeRTOS/LiteOS/RT-Thread/TencentOS Tiny), Linux, Windows, Mac에서 사용할 수 있으며 매우 간결함 API 인터페이스는 매우 적은 리소스로 QOS2의 서비스 품질을 실현하고 mbedtls 암호화 라이브러리를 원활하게 연결합니다.
매우 높은 안정성 : 삭제 및 재연결 , 패킷 손실 및 재전송 여부 에 관계없이 MQTT 프로토콜 표준을 엄격히 준수합니다 . 또한 대용량 데이터 에 대한 테스트는 수신 또는 전송 여부에 관계없이 매우 안정적이며 고주파 테스트도 가능합니다. 또한 매우 안정적입니다.
경량 : 전체 코드 프로젝트가 매우 간단합니다. Mbedtl이 없으면 리소스를 거의 차지하지 않습니다. 저자는 esp8266 모듈을 사용하여 클라우드와 통신했습니다. 전체 프로젝트 코드는 15,000개 미만의 RAM을 소비합니다.
mbedtls 암호화 전송을 지원하고 , 네트워크 전송을 더욱 안전하게 만들고, 인터페이스 계층은 암호화 여부에 관계없이 사용자가 신경 쓸 필요가 없습니다. mqttclient는 사용자가 제공하는 API 인터페이스에 대해 고정되어 있어 매우 호환됩니다. 애플리케이션 계층을 대신하는 코드는 암호화 여부에 관계없이 전송될 수 있습니다.
동시에 실행되는 여러 클라이언트와 호환되는 여러 클라이언트를 지원하며 하나의 장치가 여러 서버에 연결됩니다.
동기식 및 비동기식 처리를 지원하므로 애플리케이션은 CPU 리소스를 낭비하기 위해 차단하거나 기다릴 필요가 없습니다.
인터셉터 구성 지원 , 일부 플랫폼에서는 클라이언트가 기본적으로 시스템 테마를 자동으로 구독하며 서버의 테마는 매번 변경됩니다. 이 경우 인터셉터를 사용하여 테마와 데이터 정보를 가로채서 분리하여 사용자에게 전달해야 하므로 유연성이 크게 향상됩니다.
온라인 코드 생성 도구를 사용하면 매우 간단한 구성으로 코드를 생성할 수 있습니다. 주소: https://jiejietop.gitee.io/mqtt/index.html
매우 간단한 API 인터페이스를 가지고 있습니다 . 일반적으로 mqttclient 구성에는 기본값이 있으며 기본적으로 구성 없이 사용할 수 있고 임의로 구성할 수도 있으며 구성에 견고성 감지 기능이 있으므로 설계되었습니다. API 인터페이스도 매우 간단합니다.
다기능 매개변수는 구성 및 맞춤화 가능 , 재연결 시간 간격, 하트비트 기간, 최대 구독 수, 명령 시간 초과, 읽기 및 쓰기 버퍼 크기, 인터셉터 처리 등 매개변수는 개발자의 요구 사항을 충족하도록 맞춤화 및 구성 가능 복잡하고 단순함 다양한 개발 환경에서 사용하세요.
주제가 손실되지 않도록 자동 재연결 후 주제 자동 재구독을 지원합니다 .
테마 와일드카드 ""#", "+"`를 지원합니다 .
구독된 주제는 메시지 처리와 완전히 분리되어 프로그래밍 논리를 더 쉽고 쉽게 사용할 수 있으며 사용자는 복잡한 논리적 관계를 처리할 필요가 없습니다.
연결 유지 처리 메커니즘은 mqttclient에서 구현되었으므로 사용자는 심리적 경험을 처리할 필요 없이 애플리케이션 기능에만 집중하면 됩니다.
디자인이 매우 좋고 , 리소스가 거의 없는 녹음 메커니즘을 설계했으며, 메시지가 손실되었을 때 메시지를 재전송하여 qos1 및 qos2 서비스 품질 수준이 서비스 품질을 보장하도록 합니다.
매우 좋은 코드 스타일과 아이디어가 있습니다 . 전체 코드는 계층형 디자인을 채택하고 코드 구현은 비동기 처리 아이디어를 채택하여 결합을 줄이고 성능을 향상시킵니다.
BSD 소켓 시스템과 호환되는 한 표준 BSD 소켓을 기반으로 개발되었습니다 .
Salof의 원활한 연결 : 동기 및 비동기 로그 출력 프레임워크입니다. 유휴 상태일 때 해당 로그 정보를 출력하고 정보를 플래시에 기록하여 저장할 수도 있어 디버깅에 편리합니다.
유명한 paho mqtt 라이브러리 패키지를 사용하십시오 .
다른 종속성은 없습니다 .
이 프로젝트에는 코드를 생성하기 위해 온라인 구성만 필요한 코드 생성 도구가 있는데, 이는 매우 간단하고 사용하기 쉽습니다. 코드 생성 도구 주소는 https://jiejietop.gitee.io/mqtt/index.html입니다.

총 10857바이트 의 ROM과 RAM의 오버헤드는 거의 동적 메모리에만 의존합니다. TLS 암호화 전송을 사용하지 않으면 QOS0 서비스 품질 수준을 유지하는 통신 동적 메모리에는 약 3694 바이트만 필요합니다. 1024 읽기 버퍼 + 1024 쓰기 버퍼 + 1024 내부 스레드 스택 크기를 포함하면 다른 MQTT 클라이언트에 비해 mqttclient에는 RAM 리소스 오버헤드가 거의 필요하지 않습니다.
| 암호 | RO 데이터 | RW 데이터 | ZI 데이터 | 개체 이름 |
|---|---|---|---|---|
| 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 | 네트워크.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 | 무작위.o |
| 62 | 0 | 0 | 0 | mqtt_list.o |
| - | - | - | - | - |
| 10066 | 791 | 8 | 0 | 총 |
매우 명확한 계층화된 프레임워크를 가지고 있습니다.

프레임워크의 맨 위에는 클라이언트 애플리케이션, 릴리스, 매개변수 설정, 서버 연결, 연결 끊기, 주제 구독, 주제 구독 취소, 메시지 게시 및 기타 기능 인터페이스를 구현하는 API 기능 인터페이스가 있습니다.
유명한 paho mqtt 라이브러리는 MQTT 메시지 패킷 라이브러리로 사용됩니다.
모든 Ack를 관리하기 위해 비동기식 처리 메커니즘이 사용됩니다. 메시지를 보낼 때 서버의 응답을 기다릴 필요가 없고 기록만 합니다. 서버의 승인을 받은 후 이 레코드를 취소하면 매우 효율적입니다 . mqtt 메시지(QoS1/QoS2)가 전송되고 서버로부터 응답이 수신되지 않으면 메시지가 재전송 됩니다.
타임아웃 처리, ack 메시지 처리, 서버로부터 게시 메시지 수신 등 모든 콘텐츠를 통일된 방식으로 처리하기 위해 mqtt 항복 스레드가 내부적으로 구현됩니다. 이때 콜백 함수가 호출되어 수신된 데이터를 사용자에게 알립니다. * 게시 후, 완료 후 메시지 처리, 하트비트 메시지(살아남기 유지), 서버와의 연결이 끊어지면 다시 연결을 시도해야 하며, 주제를 다시 구독하고, 메시지를 다시 보내거나 응답해야 합니다 . *기다려 보세요.
메시지 읽기 및 쓰기, mqtt 메시지 디코딩, 메시지 설정(dup 플래그), 메시지 삭제 및 기타 작업과 같은 메시지 처리.
network는 데이터 채널을 자동으로 선택할 수 있는 네트워크 구성 요소입니다. 암호화 방법인 경우 tls 암호화가 데이터 전송에 사용되며 tls는 mbedtls를 암호화 백엔드로 선택할 수 있습니다. tcp 직접 연결 방식은 궁극적으로 tcp를 통해 전송됩니다.
플랫폼 은 소켓이나 AT, 스레드, 시간, 뮤텍스, 메모리 관리**와 같은 다양한 시스템의 항목을 캡슐화하는 플랫폼 추상화 계층으로, 이는 시스템을 다루고 크로스 플랫폼 패키지에도 필요합니다.
맨 오른쪽에는 일반 콘텐츠, 목록 처리, 로그 라이브러리, 오류 처리, 소프트웨어 난수 생성기 등이 있습니다.
현재 Linux, TencentOS 소형, FreeRTOS, RT-Thread 플랫폼이 구현되었습니다(소프트웨어 패키지 이름은 kawaii-mqtt`). TencentOS 소형 AT 프레임워크도 사용할 수 있으며 안정성이 뛰어납니다!
| 플랫폼 | 코드 위치 |
|---|---|
| 리눅스 | https://github.com/jiejieTop/mqttclient |
| TencentOS 작은 | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
| TencentOS 소형 AT 프레임워크 | https://github.com/jiejieTop/gokit3-board-mqttclient |
| RT-스레드 | https://github.com/jiejieTop/kawaii-mqtt |
| 프리RTOS | https://github.com/jiejieTop/freertos-mqttclient |
| 릴리스 버전 | 설명 |
|---|---|
| [v1.0.0] | 최초 출시, 완벽한 기본 프레임워크 및 안정성 검증 |
| [v1.0.1] | 서버와의 연결을 적극적으로 끊을 때 논리적 처리 문제를 수정합니다. |
| [v1.0.2] | 새로운 기능 인터셉터를 추가하고 몇 가지 작은 버그를 수정했습니다. |
| [v1.0.3] | 글로벌 오염을 방지하려면 로그 및 목록 관련 기능의 이름을 수정하십시오. |
| [v1.0.4] | 네트워크 구조 및 mbedtls 데이터 채널 재조정 |
| [v1.1.0] | 더 큰 버전의 업데이트, 코드 일부 리팩토링, MQTT 처리 로직 최적화, 전반적인 안정성 향상, 여러 클라이언트 지원, 의지 설정 지원, API 인터페이스 최적화 및 여러 클라우드 플랫폼 추가 코드 및 문서 테스트, 추가 온라인 코드 생성 도구, 온라인 절단 구성 도구 |
GitHub 문제 형식으로 문제 및 버그 보고서를 제출해 주셔서 감사합니다.
mqttclient는 Apache License v2.0 오픈 소스 계약을 따릅니다. 코드 공유를 장려하고 원저작자의 저작권을 존중하세요. 소스 코드를 자유롭게 사용하고 수정할 수 있으며, 수정된 코드를 오픈 소스 또는 비공개 소스 소프트웨어로 게시할 수도 있습니다.
sudo apt-get install cmake g++| 테스트 플랫폼 | 위치 |
|---|---|
| emqx (개인적으로 배포된 서버) | ./test/emqx/test.c |
| 바이두 텐공 | ./test/baidu/test.c |
| 원넷 | ./test/onenet/test.c |
| Alibaba 클라우드 사물 인터넷 | ./test/ali/test.c |
./build.shbuild.sh 스크립트를 실행하면 실행 파일 emqx , baidu , onenet 및 기타 플랫폼이 ./build/bin/ 디렉터리에 생성됩니다. 실행 가능한 프로그램을 직접 실행할 수 있습니다.
./build/bin/emqx ./make-libmqttclient.sh make-libmqttclient.sh 스크립트를 실행하면 동적 라이브러리 파일 libmqttclient.so 가 ./libmqttclient/lib 디렉토리에 생성되고 시스템의 /usr/lib 디렉토리에 설치되며 관련 헤더 파일이 ./libmqttclient/include 디렉토리를 프로젝트에 복사합니다. 애플리케이션을 컴파일할 때 동적 라이브러리만 연결하면 됩니다. -lmqttclient -lpthread , 동적 라이브러리의 구성 파일은 ./test/mqtt_config.h 구성을 기반으로 합니다.
크로스 컴파일러를 사용하는 경우 사용 중인 컴파일러에 따라 해당 환경 변수를 내보내야 하며(여기서 사용된 크로스 컴파일러는 arm-linux-gnueabihf-gcc), 동적 라이브러리 파일 libmqttclient .so 도 설정해야 합니다. libmqttclient .so 임베디드 시스템의 /usr/lib 디렉토리에 복사됩니다.
export CROSS_COMPILE=arm-linux-gnueabihf-libmqttclient.so 를 제거해야 하는 경우 다음 명령을 실행하십시오.
./make-libmqttclient.sh remove다음 문서를 참조하세요.
MQTT 프로토콜 소개
MQTT 프로토콜 통신 프로세스
mqttclient 코드 생성 도구
mqttclient 구성 및 절단 도구
mqttclient 설계 및 구현
mqttclient가 Baidu Tiangongwu Access에 연결됩니다.
mqttclient가 OneNET 클라우드 플랫폼에 연결됩니다.
mqttclient가 Alibaba Cloud IoT 플랫폼에 연결됩니다.