Клиент 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.