fastdds源码分析之EDP协议

文章目录

      • [1. 概述](#1. 概述)
      • [2. EDP 与 PDP 的关系](#2. EDP 与 PDP 的关系)
      • [3. 发现流程](#3. 发现流程)
      • [4. 内置端点](#4. 内置端点)
      • [5. EDP 实现类](#5. EDP 实现类)
      • [6. 匹配条件](#6. 匹配条件)
      • [7. 总结](#7. 总结)

1. 概述

EDP 是 RTPS 协议中用于发现端点(Writer/Reader)的协议,是 DDS 发现机制的核心部分。


2. EDP 与 PDP 的关系

复制代码
┌─────────────────────────────────────────────────────────────────────┐
│                    发现协议层次                                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   PDP (Participant Discovery Protocol)                                │
│   • 发现 Participant (参与者)                                        │
│   • 交换 ParticipantProxyData                                        │
│                                                                      │
│   EDP (Endpoint Discovery Protocol)                                  │
│   • 发现端点 (Writer/Reader)                                        │
│   • 交换 PublicationData / SubscriptionData                          │
│   • 依赖 PDP,先有 Participant 才有 Endpoint                        │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

3. 发现流程

复制代码
┌─────────────────────────────────────────────────────────────────────┐
│                    EDP 发现流程                                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   1. PDP 阶段: 参与者发现                                            │
│      A ◀───▶ B  互相知道对方的存在                                    │
│                                                                      │
│   2. EDP 阶段: 端点发现                                              │
│      A ──SUBSCRIPTION_DATA──▶ B  告知自己有哪些 Reader                │
│      A ◀───PUBLICATION_DATA── B  告知自己有哪些 Writer               │
│                                                                      │
│   3. 匹配阶段:                                                       │
│      Writer A  与  Reader B  → 匹配成功,开始通信                      │
│      Writer B  与  Reader A  → 匹配成功,开始通信                      │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

4. 内置端点

EDP 使用内置的 RTPS 端点来发送发现信息:

内置端点 说明
SEDP Publication Writer 发送本地 PublicationData
SEDP Publication Reader 接收远程 PublicationData
SEDP Subscription Writer 发送本地 SubscriptionData
SEDP Subscription Reader 接收远程 SubscriptionData

5. EDP 实现类

EDP.h:

cpp 复制代码
class EDP
{
    // SEDP 内置 Writer/Reader
    RTPSWriter* sedp_writer_;
    RTPSReader* sedp_reader_;
    
    // 本地端点注册到 SEDP
    bool registerLocalEndpoints(const BuiltinEndpointSet& endpoints);
    
    // 配对本地 Writer 与远程 Reader
    bool pairing_remote_reader_with_local_writer(
        const GUID_t& local_writer,
        const ReaderProxyData& remote_reader_data);
    
    // 配对本地 Reader 与远程 Writer
    bool pairing_remote_writer_with_local_reader(
        const GUID_t& local_reader,
        const WriterProxyData& remote_writer_data);
};

6. 匹配条件

两个端点要匹配,必须满足:

条件 说明
Topic 名称相同 topic_name 必须一致
类型名称相同 type_name 必须一致
QoS 兼容 durability、reliability 等必须兼容
类型兼容 数据类型的序列化格式必须匹配

7. 总结

复制代码
┌────────────────────────────────────────────────────────────────────┐
│                    EDP 总结                                             │
├────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  职责: 发现同 Participant 内所有的 Writer 和 Reader                │
│                                                                     │
│  使用内置主题:                                                     │
│  • DCPSPublication - 发布者信息                                    │
│  • DCPSSubscription - 订阅者信息                                   │
│                                                                     │
│  依赖: PDP (先发现 Participant)                                     │
│                                                                     │
│  匹配条件:                                                         │
│  • Topic 名称相同                                                 │
│  • 类型名称相同                                                   │
│  • QoS 兼容                                                       │
│  • 数据类型兼容                                                   │
│                                                                     │
└────────────────────────────────────────────────────────────────────┘
相关推荐
RisunJan1 小时前
Linux命令-scriptreplay(终端会话回放)
linux·运维·chrome
x²+(y-√³x²)²=12 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
世人万千丶2 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
未来之窗软件服务2 小时前
企业自动化运营-电子合同预览-东方仙盟
运维·自动化·仙盟创梦ide·东方仙盟
程序员与背包客_CoderZ3 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_properties_iterate调用流程与实战(六十五)
linux·运维·服务器·音频进阶·pipewire音频进阶
淼澄研学3 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
研华科技Advantech3 小时前
案例 | 从离线巡检到在线看护:研华PHM解决方案赋能石油钻井平台智能运维
运维·人工智能·边缘计算
難釋懷4 小时前
Nginx主动健康检查
运维·nginx
ITyunwei09874 小时前
内存溢出报错,实战处理记录
运维·服务器·企业微信