FastDDS服务发现

5.1. 发现阶段

参与者发现阶段(PDP):在此阶段,DomainParticipants互相确认对方的存在。为此,每个DomainParticipant会周期性地发送宣告消息,其中指定了(除其他信息外)DomainParticipant监听传入元数据和用户数据流量的单播地址(IP和端口)。当两个给定的DomainParticipants存在于同一个DDS域中时,它们将完成匹配。默认情况下,宣告消息使用众所周知的组播地址和端口发送(通过DomainId计算得出)。此外,还可以指定一个地址列表来使用单播发送宣告(参见初始对等端)。而且,也可以配置此类宣告的周期(参见发现配置)。
端点发现阶段(EDP):在此阶段,DataWriters和DataReaders互相确认对方。为此,DomainParticipants通过PDP阶段建立的通信通道共享彼此关于其DataWriters和DataReaders的信息。这些信息包含(除其他信息外)主题和数据类型(参见主题)。为了使两个端点匹配,它们的主题和数据类型必须一致。一旦DataWriter和DataReader完成匹配,它们就准备好发送/接收用户数据流量。
重要
可以使用PDP阶段传输有关DomainParticipant所运行的主机、用户和进程(物理信息)的信息。有关如何配置传输的物理数据,请参阅《发现信息中的物理数据》。

5.2. 发现机制

Fast DDS提供以下发现机制:
简单发现:Simple Discovery:这是默认机制。它在PDP和EDP上都支持RTPS标准,因此可与任何其他DDS和RTPS实现兼容。
静态发现:该机制在PDP阶段使用简单参与者发现协议(SPDP)(如RTPS标准所规定),但当所有DataWriters和DataReaders的IP和端口、数据类型以及主题都预先已知时,允许跳过简单端点发现协议(SEDP)阶段。
发现服务器:此发现机制使用集中式发现架构,其中一个被称为服务器的DomainParticipant充当元流量发现的中心枢纽。
手动发现:该机制仅兼容RTPS层。它禁用PDP,允许用户使用其选择的任意外部元信息通道手动匹配和取消匹配RTPSParticipants、RTPSReaders和RTPSWriters。因此,用户必须访问由DomainParticipant实现的RTPSParticipant,并直接匹配RTPS实体。

### FastDDS 服务发现的实现原理与源码分析 FastDDS服务发现机制基于 DDS 协议中的参与者现协议(PDP, Participant Discovery Protocol)和主题现协议(EDP, Endpoint Discovery Protocol)。这两种协议共同协作,使得不同节点上的 DomainParticipant 可以相互识别并建立通信连接。 #### PDP (Participant Discovery Protocol) PDP 是 FastDDS 中的核心现协议之一,主要用于检测同一域内的其他 DomainParticipants。当一个新的 DomainParticipant 创建时,它会广播自己的存在并通过监听网络来获取其他参与者的元数据信息[^4]。具体来说: - **本地注册表维护**:每个 DomainParticipant 都有一个本地注册表,记录已知的所有远程 DomainParticipants 的信息。 - **Builtin Topics 使用**:为了传播这些信息,FastDDS 利用了几个内置的主题(Built-in Topics),例如 `DCPSParticipant` 主题。此主题描述了 DomainParticipant 的属性及其 QoS 设置。 - **周期性心跳消息**:除了初始广播外,DomainParticipants 还定期送心跳消息以保持活跃状态,并通知其他节点自己仍然在线[^5]。 ```cpp // 示例代码片段展示如何初始化 BuiltinTopicsData 并设置相关参数 void initialize_builtin_topics(BuiltinTopicsData& builtin_data) { builtin_data.participant_guid.prefix.value[0] = ...; builtin_data.participant_proxy.qos.policies.reliability.kind = RELIABLE_RELIABILITY_QOS; } ``` #### EDP (Endpoint Discovery Protocol) 一旦两个或多个 DomainParticipants 成功交换彼此的信息后,则进入端点级别的协商阶段——即由 EDP 来处理 Publisher 和 Subscriber 的匹配过程。这一步骤涉及以下几个方面: 1. **Publisher 和 Subscriber 注册**:每当创建一个新的 DataWriter 或 DataReader 时,对应的 DomainParticipant 将其详细资料提交到全局数据库中。 2. **兼容性检查**:根据 Topic 名称、Type 类型以及其他预定义条件评估哪些 Publishers 能够被 Subscribers 订阅。 3. **关联建立**:最终达成一致意见之后,双方开始正式握手流程从而形成实际的数据流管道[^4]。 值得注意的是,在整个过程中,FastDDS 提供了一种灵活的方式来调整默认行为,比如通过修改 XML 文件来自定义某些高级选项或者启用额外的安全特性等等[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值