Клиент MQTT C++

Я хотел бы реализовать функциональность клиента MQTT на C++ (он должен быть потокобезопасным и иметь возможность подписываться на темы, а также публиковать, но функциональность брокера не требуется).

Я рассматривал Paho MQTT от Eclipse. Вот их страница загрузки.

Я обнаружил, что у них нет поддержки MQTT5.0.

Однако на их github: есть оболочка C++, которая в версии 1.1 заявляет о поддержке MQTTv5.0.

Затем я нашел этот вопрос: клиентская библиотека Mosquitto vs eclipse paho, где был сделан вывод:

использовать libmosquitto с оболочкой libmosquittopp

Я проверил libmosquittopp.h: все функции помечены как устаревшие, поэтому я не думаю, что на данный момент это может быть правильным способом.

Почему libmosquittopp устарел? Потому как

Обертка была создана по внешнему запросу, и на момент ее создания других решений C++ для MQTT не существовало. Это изменилось за последние годы, и эта оболочка не дает никаких преимуществ перед настоящими библиотеками C++ или использованием чистого C libmosquitto.

Итак, считается ли Paho правильным направлением использования MQTT в C++?

Или я просто буду использовать чистую библиотеку C от Mosquitto?

Или что-нибудь еще (кроме записи с 0)?

3 ответа

Решение

Библиотека Paho C++ поддерживает MQTT v5 и является потокобезопасной. Вы можете публиковать и подписываться из нескольких потоков с помощью одного клиентского подключения.

Некоторые веб-страницы Eclipse необходимо обновить с учетом последних функций. Репозитории GitHub, как правило, содержат самую свежую информацию.

Библиотека Paho C++ просто обертывает библиотеку Paho C, но предоставляет асинхронный API в стиле Futures и обеспечивает управление памятью с помощью общих указателей.

Если вы используете Boost.asio, то этот проект - правильный выбор.

https://github.com/redboltz/mqtt_cpp

Это собственный C++, без оболочки вокруг C и поддерживает как v3.1.1, так и v5.

Остановите прессу! По состоянию на ноябрь 2023 года в блоке появился новый вариант — Async.MQTT5:

https://github.com/mireo/async-mqtt5

Он также построен на основе Boost.Asio, но имеет чрезвычайно надежный, чистый и лаконичный код. Из официальной документации:

Async.MQTT5 — это профессиональный клиент C++20 промышленного уровня, созданный на основе Boost.Asio. Этот клиент предназначен для публикации или получения сообщений от брокера, совместимого с MQTT 5.0. Async.MQTT5 представляет собой комплексную реализацию стандарта протокола MQTT 5.0, предлагающую полную поддержку публикации или получения сообщений с QoS 0, 1 и 2.

Наше явное намерение — включить библиотеку Async.MQTT5 в Boost. Мы над этим активно работаем.

Отказ от ответственности: я работаю в Mireo, компании, которая открыла исходный код этого клиента MQTT.

Другие вопросы по тегам