目录
所有DDS都具有三个最重要的机制,一是发现机制,二是收发机制,三是QoS机制。DDS的发现机制是高可靠性和即插即用扩展性的实现基础,也是DDS区别于传统消息队列、原始套接字程序的主要特征。因此,可以说发现机制不仅是Fast DDS的核心机制,也是所有DDS的核心机制,不了解发现机制,则不能进阶为DDS高手。
Fast DDS作为一种数据分发服务(DDS)实现,它也提供了发现机制,允许跨域参与者自动查找和匹配DataWriter和DataReader,以便他们可以开始共享数据。对于Fast DDS的几种发现机制,发现过程共分为两个阶段执行。本节可与上节对照,互相参考。
一、发现阶段
1、参与者发现阶段(PDP):在此阶段,域参与者确认彼此的存在。为此,每个DomainParticipant都会定期发送通知消息。当两个给定的DomainParticipant存在于同一DDS域中时,它们将匹配。默认情况下,使用已知的多播地址和端口(使用DomainId计算)发送通知消息。此外,还可以指定使用单播发送通知的地址列表。此外,还可以配置此类通知的周期性。
2、端点发现阶段(EDP):在此阶段,DataWriter和DataReader相互确认。为此,DomainParticipants使用PDP期间建立的通信信道,彼此共享有关其DataWriter和DataReader的信息。除其他外,此信息还包含主题和数据类型。要使两个端点匹配,其主题和数据类型必须一致。一旦DataWriter和DataReader匹配,它们就可以发送/接收用户数据流量了。
可以使用PDP阶段传输有关运行DomainParticipant的主机、用户和进程(物理信息)的信息。
二、四种发现机制
Fast DDS提供以下发现机制:
简单发现:这是默认机制。它支持PDP和EDP的RTPS标准,因此提供与任何其他DDS和RTPS实现的兼容性。
静态发现:该机制在PDP阶段使用简单参与者发现协议(SPDP)(如RTPS标准所规定),但允许在事先知道所有DataWriter和DataReader的IP和端口、数据类型和主题时跳过简单端点发现协议(SEDP)阶段。
发现服务器:此发现机制使用集中式发现架构,其中DomainParticipant(称为服务器)充当元流量发现的中心。
手动发现:此机制仅与RTPS层兼容。它禁用PDP,允许用户使用其选择的任何外部元信息通道手动匹配和取消匹配RTPSParticipant、RTPSReader和RTPSWriter。因此,用户必须访问DomainParticipant实现的RTPSParticipant,并直接匹配RTPS实体。
三、简单发现协议介绍
SIMPLE发现协议是默认发现协议,它解决了在各种DDS实体之间建立端到端连接的问题。Fast DDS实现了SIMPLE发现协议,以提供与RTPS标准的兼容性。该规范将SIMPLE发现协议分成两个独立的协议:
简单参与者发现协议(SPDP):指定域参与者如何在网络中发现彼此;它宣布并检测同一域中DomainParticipant的存在。
简单端点发现协议(SEDP):定义所发现的域参与者为交换信息而采用的协议,以便发现每个域参与者中包含的DDS实体,即DataWriter和DataReader。
简单发现协议属性 | 描述 |
---|---|
Initial Announcements | 它定义了DomainParticipant初始声明的行为。 |
Simple EDP Attributes | 它将SIMPLE协议定义为发现协议。 |
Initial peers | 向其发送SPDP通知的DomainParticipant的IP/端口对列表。 |
1、Initial Announcement(初始通告)
RTPS标准的简单发现机制要求域参与者发送其在域中存在的通知。这些公告不是以可靠的方式传递的,可以由网络处理。为了避免消息处理导致的发现延迟,可以将初始通知设置为进行多次拍摄,以增加适当的接收机会。请参阅InitialAnnouncementConfig。
初始通知仅在创建参与者时进行。此阶段结束后,执行的唯一公告是基于租赁Duration_announcementperiod(而不是period)的标准公告。
属性名称 | 描述 |
---|---|
count | 它定义了启动时要发送的公告数量。 |
period | 它定义了首次通告的具体期限。 |
2、Simple EDP Attributs(简单节点发现属性)
属性名称 | 描述 |
---|---|
SIMPLE EDP | 它将SIMPLE协议定义为EDP阶段的发现协议。DomainParticipant可以同时创建DataWriter和DataReader,也可以两者都不创建。 |
Publication writer and Subscription reader | 它适用于仅实现一个或多个DataWriter的DomainParticipant,即不实现DataReader。它只允许创建与DataReader发现相关的EDP端点。 |
Publication reader and Subscription writer | 它适用于仅实现一个或多个DataReader的DomainParticipant,即不实现DataWriter。它只允许创建与DataWriter发现相关的EDP端点。 |
3、Initial peers(初始对等列表)
每个RTPS参与者必须在两个不同的端口(一个与多播地址链接,另一个与单播地址链接)中侦听传入的参与者发现协议(PDP)发现元流量。快速DDS允许配置初始对等方列表,该列表包含一个或多个与远程域参与者PDP发现侦听资源相对应的IP端口地址对,从而本地域参与者不仅将其PDP流量发送到其域指定的默认多播地址端口,而且还发送到初始对等列表中指定的所有IP端口地址对。
DomainParticipant的初始对等方列表包含它将与之通信的所有其他DomainParticipate的IP端口地址对列表。它是DomainParticipant将在单播发现机制中一起使用的地址列表,或作为多播发现的替代。因此,这种方法也适用于多播功能不可用的场景。
RTPS参与者的发现流量单播侦听端口使用以下公式计算:7400+250域ID+10+2参与者ID。因此,例如RTPSParticipant在域0(默认域)中操作并且其ID为1,则其发现流量单播侦听端口将为:7400+2500+10+21=7412。默认情况下,Fast DDS使用元流量多播定位器作为初始对等点。