FastDDS服务发现

FastDDS服务发现
https://zhuanlan.zhihu.com/p/12663878689

### 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]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值