数据分发服务(DDS)是一种以数据为中心的通信协议,用于分布式软件应用程序通信。它描述了实现数据提供者和数据消费者之间通信的通信应用程序编程接口(API)和通信语义。
DDS
在实现过程中定义了三个关键的应用实体:
- 发布实体(publication entities),定义了信息生成对象及其属性;
- 订阅实体(subscription entities),定义信息消费对象及其属性;
- 配置实体(configuration entities),其定义作为主题传输的信息类型,并创建具有其服务质量(QoS)属性的发布者和订阅者,从而确保上述实体的正确性能。
DDS使用QoS来定义DDS实体的行为特征。QoS由单独的QoS策略(从QoSPolicy派生的类型的对象)组成
在DCPS模型中,为通信应用程序系统的开发定义了四个基本元素。
Publisher:它是DCPS实体,负责创建和配置它所实现的DataWriters。DataWriter是负责实际发布消息的实体。每个都将有一个指定的主题,在该主题下发布消息.
Subscriber:DCPS实体负责接收在其订阅的主题下发布的数据。它为一个或多个DataReader对象提供服务,这些对象负责将新数据的可用性传达给应用程序
Topic:它是绑定发布和订阅的实体。它在DDS域中是唯一的。通过TopicDescription,它可以统一发布和订阅的数据类型。
Domain:这是一个用于链接属于一个或多个应用程序的所有发布者和订阅者的概念,这些应用程序在不同的主题下交换数据。这些参与域的单独应用程序称为DomainParticipant。DDS域由域ID标识。DomainParticipant定义域ID以指定其所属的DDS域。具有不同ID的两个DomainParticipants不知道对方在网络中的存在。因此,可以创建几个通信信道。这适用于涉及多个DDS应用程序的场景,它们各自的DomainParticipants相互通信,但这些应用程序不得干扰。DomainParticipant充当其他DCPS实体的容器,充当发布服务器、订阅服务器和主题实体的工厂,并在域中提供管理服务
RTPS
为支持DDS应用程序而开发的实时发布-订阅(RTPS)协议是一种通过UDP/IP等尽力传输的发布-订阅通信中间件。此外,Fast DDS还支持TCP和共享内存(SHM)传输。
它被设计为同时支持单播和多播通信。在继承自DDS的RTPS的顶部,可以找到Domain,它定义了一个单独的通信平面。多个域可以同时独立共存。域包含任意数量的RTPSP参与者,即能够发送和接收数据的元素。为此,RTPSP参与者使用他们的终点:
域表示一个单独的通信平面。它在共享公共通信基础设施的实体之间创建了逻辑分离。从概念上讲,它可以被视为一个虚拟网络,将运行在同一域上的所有应用程序链接起来,并将它们与运行在不同域上的应用程序隔离开来。通过这种方式,几个独立的分布式应用程序可以共存于同一物理网络中,而不会发生干扰,甚至不会相互了解。每个域都有一个唯一的标识符,称为domainId,它被实现为uint32值。共享此domainId的应用程序属于同一个域,并且能够进行通信。
DomainParticipant是应用程序到域的入口点。每个DomainParticipant从创建起就链接到一个域,并包含与该域相关的所有实体。它还充当发布服务、订阅服务和主题的工厂。DomainParticipant的行为可以使用DomainParticipantQos上指定的QoS值进行修改。
发布是通过DataWriter与发布服务(Publisher)的关联来定义的。若要开始发布数据实例的值,应用程序将在发布服务器中创建一个新的DataWriter。此DataWriter将绑定到描述正在传输的数据类型的Topic。与此主题匹配的远程订阅将能够从DataWriter接收数据值更新。
订阅是通过DataReader与订阅服务(subscriber)的关联来定义的。若要开始接收发布的更新,应用程序将在订阅服务器中创建一个新的DataReader。此DataReader将绑定到描述将要接收的数据类型的Topic。然后,DataReader将开始接收来自与此主题匹配的远程发布的数据值更新。当订阅服务器接收到数据时,它会通知应用程序新数据可用。然后,应用程序可以使用DataReader来获取接收到的数据。