中文说明
Высокопроизводительный, высокостабильный кроссплатформенный клиент MQTT.
Высокопроизводительный, высокостабильный, кросс-платформенный клиент MQTT, разработанный на основе API сокетов, может использоваться на встроенных устройствах (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny), Linux, Windows, Mac и имеет очень кратко Интерфейс API реализует качество обслуживания QOS2 с очень небольшим количеством ресурсов и легко подключает библиотеку шифрования mbedtls.
Чрезвычайно высокая стабильность : будь то отбрасывание и повторное подключение , потеря пакетов и повторная передача , он строго соответствует стандарту протокола MQTT , в дополнение к тесту большого объема данных очень стабилен независимо от того, принимается или отправляется, а также высокочастотный тест. также очень стабилен.
Легкость : весь проект кода чрезвычайно прост. Без mbedtls он занимает очень мало ресурсов. Для связи с облаком автор использовал модуль esp8266. Весь код проекта занимает менее 15 КБ ОЗУ.
Поддержите зашифрованную передачу mbedtls , сделайте передачу по сети более безопасной, а уровень интерфейса не требует от пользователей заботы, независимо от того, зашифрован он или нет, mqttclient фиксирован для интерфейса API, предоставленного пользователем, который очень совместим. Набор Кодов от имени прикладного уровня можно передавать с шифрованием или без него.
Поддерживает несколько клиентов , совместим с несколькими клиентами, работающими одновременно, одно устройство подключено к нескольким серверам.
Поддерживает синхронную и асинхронную обработку , приложениям не нужно блокировать и ждать, чтобы тратить ресурсы ЦП.
Поддержка конфигурации перехватчика , на некоторых платформах клиент по умолчанию автоматически подписывается на системную тему, а тема с сервера меняется каждый раз. В этом случае вам необходимо использовать перехватчик для перехвата и разделения информации о теме и данных и доставки ее пользователям, что значительно повышает гибкость.
С помощью онлайн-инструмента генерации кода код можно сгенерировать с чрезвычайно простой конфигурацией, адрес: 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 байт , а накладные расходы на ОЗУ практически зависят только от динамической памяти. Без использования зашифрованной передачи TLS динамическая память связи, поддерживающая уровень качества обслуживания QOS0, требует всего около 3694 байт. Включая 1024 буфера чтения + 1024 буфера записи + 1024 размера стека внутренних потоков, по сравнению с другими клиентами MQTT, mqttclient требует очень небольших затрат ресурсов ОЗУ.
Код | Данные RO | Данные RW | Данные ЗИ | Имя объекта |
---|---|---|---|---|
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 | сеть.о |
24 | 0 | 0 | 0 | Platform_memory.o |
40 | 0 | 0 | 0 | платформа_mutex.o |
344 | 0 | 0 | 0 | Platform_net_socket.o |
94 | 0 | 0 | 0 | платформа_thread.o |
70 | 0 | 0 | 0 | Platform_timer.o |
246 | 0 | 4 | 0 | случайный.о |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | общий |
Имеет очень четкую многоуровневую структуру.
В верхней части структуры находится интерфейс функции API , который реализует клиентское приложение, выпуск, установку параметров, подключение к серверу, отключение, подписку на тему, отписку от темы, публикацию сообщения и другие функциональные интерфейсы.
В качестве библиотеки пакетов сообщений MQTT используется знаменитая библиотека paho mqtt .
Для управления всеми подтверждениями используется механизм асинхронной обработки. Ему не нужно ждать ответа сервера при отправке сообщения, а только записывает его. После получения подтверждения сервера отмените эту запись, очень эффективно ; и когда сообщение mqtt (QoS1/QoS2) отправлено и ответ от сервера не получен, сообщение будет передано повторно .
Поток доходности mqtt реализован внутри для унифицированной обработки всего контента, например , обработки тайм-аута, обработки сообщения подтверждения и получения сообщения публикации с сервера . В этот момент будет вызвана функция обратного вызова. Сообщите пользователю о полученных данных, * пост-релиз, обработка сообщения после завершения, сообщение Heartbeat (поддерживать активность), при отключении от сервера нужно попытаться переподключиться, повторно подписаться на тему, повторно отправить сообщение или ответить *Подождите.
Обработка сообщений, такая как чтение и запись сообщений, декодирование сообщений mqtt, установка сообщений (флаг dup), уничтожение сообщений и другие операции.
сеть — это сетевой компонент, который может автоматически выбирать канал данных . Если это метод шифрования, для передачи данных используется шифрование tls , а tls может выбрать mbedtls в качестве механизма шифрования; это также может быть Метод прямого соединения TCP в конечном итоге передается через TCP.
Платформа — это уровень абстракции платформы, который инкапсулирует вещи из разных систем, таких как Socke или AT, поток, время, мьютекс, управление памятью**, они имеют дело с системой и также необходимы для кросс-платформенного пакета.
В крайнем правом углу находится общий контент, обработка списков, библиотека журналов, обработка ошибок, программный генератор случайных чисел и т. д.
В настоящее время реализованы платформы Linux, TencentOS tiny, FreeRTOS, RT-Thread (пакет программного обеспечения называется kawaii-mqtt`), в дополнение к платформе TencentOS tiny AT также можно использовать, и стабильность отличная!
Платформа | Расположение кода |
---|---|
Линукс | https://github.com/jiejieTop/mqttclient |
TencentOS крошечный | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
Крошечная AT-инфраструктура TencentOS | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-Тред | https://github.com/jiejieTop/kawaii-mqtt |
FreeRTOS | 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 Issues.
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.sh
После запуска сценария build.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
копируется в каталог /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