C++中间件DDS介绍
C DDS 库简介DDSData Distribution Service 是一种用于实时分布式系统通信的中间件 标准由 OMGObject Management Group 提出。它是一种发布/订阅Publish/Subscribe模式的数据通信框架广泛应用于嵌入式系统、物联网、航空航天、机器人等领域。C DDS 库是实现 DDS 标准的库常见的实现包括RTI Connext DDSReal-Time Innovations 提供OpenDDS开源实现Eclipse Cyclone DDS开源实现Fast DDS (以前称为 FastRTPS)由 eProsima 开发这些库提供了丰富的 API用于创建发布者、订阅者、定义数据类型和 QoSQuality of Service等功能。DDS 的核心概念DomainParticipant表示 DDS 系统的入口点属于特定的域。Publisher/Subscriber分别用于发布和订阅数据。Topic数据通信的主题定义通信数据的类型。DataWriter/DataReader负责数据的写入与读取。QoS定义数据传输的质量服务属性。一个简单的 C DDS 代码示例以下是使用 RTI Connext DDS 的一个简单例子展示如何发布和订阅一个简单的消息数据类型。请确保你已安装 RTI Connext DDS 或其他 DDS 实现并正确配置开发环境。1. 定义数据类型IDL 文件IDL (Interface Definition Language) 文件用于定义消息的数据结构DDS 会通过工具生成相应的 C 类型。2. 发布者Publisher代码3. 订阅者Subscriber代码DDS和MQTT的区别DDSData Distribution Service 和 MQTTMessage Queuing Telemetry Transport 是两种用于分布式系统通信的协议或标准它们在设计目标、特性和应用场景上有显著的区别。以下从多个方面对比它们1. 核心概念与设计目标DDS是一种 实时分布式系统通信中间件标准由 OMGObject Management Group 制定。提供 数据中心式的发布/订阅Publish/Subscribe模型并且支持 点对点通信。设计目标是为 低延迟、高吞吐量、实时性和可靠性 的系统提供支持主要用于嵌入式系统、工业自动化、国防、航空航天、机器人、汽车等场景。强调 数据优先Data-Centric通过 Topic 直接共享数据并支持复杂的 QoSQuality of Service 配置。MQTT是一种轻量级的 消息队列协议由 IBM 提出后成为 OASIS 标准。提供 发布/订阅Publish/Subscribe模型但以 消息传输 为核心。设计目标是为 低带宽、高延迟、不可靠网络如物联网设备提供简单可靠的通信方式广泛应用于物联网 (IoT)、智能家居、移动应用等场景。强调 消息优先Message-Centric通过 Broker 中转消息设备之间并不直接通信。2. 架构对比DDS分布式架构DDS 是去中心化的Brokerless无需中央服务器。所有参与者如发布者、订阅者可以直接通信。数据中心化基于 Topic 共享数据支持复杂的数据类型和强大的 QoS 配置。灵活性支持动态发现Dynamic Discovery系统中的节点可以动态加入或离开。MQTT中心化架构MQTT 依赖于一个 Broker中间服务器所有消息都通过 Broker 转发。消息传输基于 Topic 组织消息消息是无状态的数据类型简单通常是字符串或 JSON。设备简单性客户端实现非常轻量适用于低功耗设备。3. QoS服务质量支持DDSDDS 提供了 22 种 QoS 策略可以对实时性、可靠性、资源管理、延迟、传输顺序等进行精细控制。例如Deadline设置数据传输的时间期限。Latency Budget定义通信的延迟预算。Reliability支持可靠传输可靠模式或最佳传输不保证消息到达。Durability支持数据的持久化确保新订阅者可以获得历史数据。DDS 的 QoS 机制非常灵活适用于复杂场景。MQTTMQTT 提供了 3 种简单的 QoS 等级QoS 0消息最多发送一次不保证到达。QoS 1消息至少发送一次可能重复。QoS 2消息保证仅发送一次且不会重复最可靠。QoS 机制相对简单主要适用于低复杂度的 IoT 场景。4. 性能对比DDS由于 DDS 是去中心化的通信路径更短通常具有 低延迟、高吞吐量 的特性。支持 实时性 和 高可靠性适合对延迟、抖动敏感的场景如无人机控制、工业机器人。性能依赖于网络和硬件环境在高性能网络中表现极为出色。MQTTMQTT 由于采用中心化架构通信性能受 Broker 服务器 的影响。适合 低带宽网络 和 高延迟环境但在实时性要求高的场景中表现不如 DDS。消耗资源少非常适合低功耗设备。5. 使用场景DDS工业自动化实时监控和控制如工厂设备间通信。航空航天飞行器传感器数据共享、控制系统。机器人机器人操作系统如 ROS 2 的通信层基于 DDS。汽车自动驾驶汽车的传感器融合、车辆间通信。国防领域分布式作战系统、军事仿真。MQTT物联网 (IoT)智能家居、智能农业、环境监测。移动应用即时消息、状态更新。远程监控设备状态上传、警报通知。能源管理智能电网监测。智能交通传感器数据上传、车辆定位。6. 易用性与学习曲线DDSDDS 功能强大但 API 和配置相对复杂学习曲线较陡。开发和调试 DDS 应用需要对 QoS 策略和分布式系统有较深入的了解。多数 DDS 实现如 RTI Connext DDS提供大量工具和文档但仍需要较高的专业技能。MQTTMQTT 设计简单易于上手开发和部署快速。客户端实现轻量适合嵌入式和低功耗设备。由于依赖 Broker部署和管理集中化。7. 开源实现DDS常见的 DDS 实现包括RTI Connext DDS商业版功能强大OpenDDS开源Apache 2.0 许可证Eclipse Cyclone DDS开源Eclipse 基金会维护Fast-DDS以前称为 FastRTPS开源eProsima 提供这些实现通常支持多种编程语言C、Java、Python 等。MQTT常见的 MQTT BrokerMosquitto开源轻量级EMQX开源高性能支持分布式部署HiveMQ商业版支持企业级功能VerneMQ开源支持大规模连接MQTT 客户端库也非常丰富几乎支持所有主流语言。8. 总结对比特性 DDS MQTT架构 去中心化Brokerless 中心化需要 Broker实时性 高实时性低延迟 针对低带宽、高延迟环境QoS 复杂且灵活22 种 QoS 策略 简单3 种 QoS 等级适用场景 工业自动化、航空航天、机器人等 IoT、智能家居、移动应用等学习曲线 较陡需要较高专业技能 简单快速上手性能 高吞吐量、低延迟 适合低功耗和高延迟网络总结如果你的项目需要 实时性、高可靠性、复杂 QoS并且运行在高性能网络中例如工业自动化或机器人控制DDS 是更好的选择。如果你的项目需要 轻量、低功耗、简单消息传递运行在低带宽或不可靠的网络中例如物联网设备或智能家居MQTT 是更适合的选择。————————————————原文链接https://blog.csdn.net/yao_hou/article/details/145758883