MQTT中文站
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
      • Node-RED 安装部署
      • Node-RED 用户指南
      • Node-RED 创建节点
      • Node-RED 示例教程
      • Node-RED 开发流程
      • Node-RED 接口参考
      • Node-RED 配置模板
      • Node-RED 常见问题
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
首页 MQTT 客户端库 Async.MQTT5:新的 C++20 MQTT 客户端库

Async.MQTT5:新的 C++20 MQTT 客户端库

2 年前 • MQTT 客户端库

Async.MQTT5是一个基于Boost.Asio的C++20 MQTT客户端,专门为发布或接收与MQTT 5.0兼容的代理的消息而设计。这是一个全面实施MQTT 5.0协议标准的客户端,完全支持QoS 0、1和2级别的消息发布和接收。

Async.MQTT5

MQTT协议广泛用于现实世界的多种通信场景,主要作为IoT设备数据传输的可靠通信协议。虽然MQTT协议本身相对简单,但将其整合到应用程序中可能相当复杂,尤其是在断开/重连序列后消息重传的实现方面。

Async.MQTT5旨在为应用开发者提供一个非常简单的异步C++接口。内部客户端实现管理网络和MQTT协议细节。值得注意的是,客户端不暴露连接函数(或异步连接函数);相反,网络连接性、MQTT握手和消息重传都在客户端内部自动处理。

Async.MQTT5接口与Boost.Asio的异步模型无缝对接。客户端的异步函数与Boost.Asio支持的所有完成令牌兼容。

仓库地址:https://github.com/mireo/async-mqtt5

特点

Async.MQTT5是一个设计理念为用户只应专注于应用逻辑,而不是网络复杂性的库。该库试图通过以下一系列关键特性来提升开发体验:

  • 完整的TCP、TLS/SSL和WebSocket支持
  • 用户友好的简洁性:提供尽可能简单而不损功能的界面。
  • 优先考虑效率:尽可能高效地利用网络和内存资源。
  • 最小内存占用:确保在IoT设备典型的资源受限环境中优化性能。
  • 自动重新连接:在断开连接的情况下自动尝试重新建立连接。
  • 完全符合Boost.Asio规范:接口和实现策略基于Boost.Asio的基础。Boost.Asio和Boost.Beast的用户将不会在理解和整合Async.MQTT5时遇到问题。此外,Async.MQTT5与Boost.Asio生态系统中的任何其他库都能很好地整合。
  • 自定义分配器:支持自定义分配器,允许对内存资源进行额外的灵活性和控制。Async.MQTT5将使用来自异步函数的处理器关联的分配器来创建库实现中所需的对象实例。
  • 每项操作的取消:所有异步操作都支持Asio的每项操作取消。
  • 完成令牌:所有异步函数都支持CompletionToken,允许使用回调、协程、futures等多种方式灵活使用。
  • 完全实现MQTT 5.0规范
  • 支持QoS 0、QoS 1和QoS 2
  • 自定义认证:Async.MQTT5定义了一个接口,用于执行增强认证的自定义认证器。
  • 高可用性:Async.MQTT5支持列出同一集群中多个客户端可以连接的代理。在与一个代理的连接失败时,客户端会切换到列表中的下一个。
  • 离线缓冲:离线时,它会自动缓冲所有连接恢复时要发送的数据包。

使用该库 下载Boost,并将其添加到您的包含路径中。 如果使用SSL,请下载OpenSSL,链接库并将其添加到包含路径中。 另外,您可以将Async.MQTT5的包含文件夹添加到包含路径中。 您可以使用以下命令行在Linux上编译以下示例:

$ clang++ -std=c++20 <source-cpp-file> -o example -I<path-to-boost> -Iinclude -pthread

使用和API 详细文档在这里。

以下示例演示了配置客户端并使用QoS 0发布“Hello World!”应用消息的简单场景。

#include <iostream>

#include <boost/asio/io_context.hpp>
#include <boost/asio/detached.hpp>
#include <boost/asio/ip/tcp.hpp>

#include <async_mqtt5.hpp>

int main() {
    boost::asio::io_context ioc;

    using client_type = async_mqtt5::mqtt_client<boost::asio::ip::tcp::socket>;
    client_type c(ioc, "");

    c.credentials("<your-client-id>", "<client-username>", "<client-pwd>")
        .brokers("<your-mqtt-broker>", 1883)
        .run();

    c.async_publish<async_mqtt5::qos_e::at_most_once>(
        "<topic>", "Hello world!",
        async_mqtt5::retain_e::no, async_mqtt5::publish_props {},
        [&c](async_mqtt5::error_code ec) {
            std::cout << ec.message() << std::endl;
            c.async_disconnect(boost::asio::detached); // disconnect and close the client
        }
    );
    
    ioc.run();
}

为什么选择它?

如果以下任何一种情况适用于您,则Async.MQTT5可能适合您:

  • 您的应用程序使用Boost.Asio并需要集成MQTT客户端。
  • 您需要异步访问MQTT代理。
  • 您正在开发需要连接到MQTT代理的高级组件。
  • 您需要一个可靠且有韧性的MQTT客户端,可以自动管理所有与网络相关的问题。

如果以下情况使用,则可能不适合您:

  • 您仅需要同步访问MQTT代理。
  • 您连接的MQTT代理不支持MQTT 5版本。

需求 Async.MQTT5是一个仅头文件的库。要使用Async.MQTT5,需要以下条件:

  • C++20兼容的编译器
  • Boost 1.82或更高版本。除了Asio,我们还使用了Beast、Spirit等其他仅头文件的库。
  • OpenSSL。仅当您通过使用boost::asio::ssl::stream需要SSL连接时。

Async.MQTT5已在以下编译器上进行了测试:

  • clang 14.0(Linux)
  • MSVC 14.37 - Visual Studio 2022(Windows)

总结

Async.MQTT5是一个基于Boost.Asio的专业C++20 MQTT客户端,专为发布或接收与MQTT 5.0兼容代理的消息而设计。这个客户端提供了MQTT 5.0协议标准的全面实现,并全面支持QoS 0、1和2的消息发布和接收。

Async.MQTT5的目的是为应用开发者提供一个非常简单的异步C++接口,以简化MQTT协议的集成和使用。它自动处理网络连接、MQTT握手和消息重传,使用户可以专注于应用逻辑。

Async.MQTT5提供了包括TCP、TLS/SSL和WebSocket支持、最小内存占用、自动重新连接等特性,使其在IoT设备环境中表现出色。此外,它支持自定义分配器和每项操作的取消,使其在高度定制化的应用场景中也能灵活应用。

使用Async.MQTT5,您只需下载Boost和(如需SSL支持)OpenSSL,并将它们添加到包含路径中。它是一个头文件库,不需要额外的编译步骤。

Async.MQTT5适用于需要集成MQTT客户端的Boost.Asio应用程序,或那些需要稳定、自动管理网络问题的高级MQTT客户端的场景。然而,如果您只需要同步访问MQTT代理或使用的MQTT代理不支持MQTT 5版本,它可能不适合您。

最后,Async.MQTT5已经在Linux和Windows平台的最新编译器上进行了测试,保证了其广泛的兼容性和稳定性。

打赏赞(1)微海报分享
asio mqtt

MQTT 发布、MQTT 订阅和取消订阅

Sparkplug 成为国际标准,工业物联网里程碑

猜你喜欢

改善基础设施:HiveMQ如何推动智能城市发展

改善基础设施:HiveMQ如何推动智能城市发展

08/07
2024
为什么企业选择全托管HiveMQ云进行MQTT部署

为什么企业选择全托管HiveMQ云进行MQTT部署

07/01
2024
MQTT 赋能工业 PLC 数据采集与应用

MQTT 赋能工业 PLC 数据采集与应用

06/30
2024

回复

抢沙发咯
  • 解决方案
    • 智能家居
    • 汽车与出行
    • 工业制造
    • 能源电力
    • 石油石化
    • 交通物流
    • 零售
  • 学习
    • MQTT 规范
    • MQTT 教程
    • MQTT 软件
    • MQTT 客户端库
    • MQTT 服务器
    • 工具和应用程序
  • 关于我们
    • 了解创科慧仁
    • 加入创科慧仁
    • 投资者关系
    • 新闻动态
    • 合作伙伴
    • 联系我们
  • 友情链接
    • Modbus中文网
    • 跳动符号官网
    • 物联网世界
    • RFID世界网
    • 深圳物联网协会
    • isoftstone软通动力
    • 中国发展战略学研究会
    • B.P商业伙伴
  • 在线客服
  • 全国客户服务热线
    4006909885
  • 官方公众号
  • 联系邮箱
    contact@mqtt.cn
Copyright © 2025 MQTT中文站. All rights reserved.Designed by nicetheme. 京ICP备20029519号
在线客服

微信咨询

微信咨询

4006909885

服务热线 7*24小时

电话咨询
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
string(5) "2.0.0"