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 兼容                                                       │
│  • 数据类型兼容                                                   │
│                                                                     │
└────────────────────────────────────────────────────────────────────┘
相关推荐
智灵鸟科技16 分钟前
封闭网络怎么安全地接外部能力:三条通道穷举、威胁封堵矩阵与残余风险
网络·安全·矩阵
信仰87423 分钟前
HCIA-华为数通基础理论与实践10
网络·华为·智能路由器
信仰87428 分钟前
HCIA-华为数通基础理论与实践06
网络·华为
VX_1832 分钟前
域名SSL证书监测平台
网络·网络协议·ssl
极客先躯1 小时前
高级java每日一道面试题-2026年04月18日-实战篇[Docker]-如何处理金融行业的时序数据容器化?
java·运维·docker·容器·金融·时序数据·高级面试
运维大师1 小时前
【K8S 运维实战】01-K8s架构深度剖析
运维·架构·kubernetes
liulilittle1 小时前
论无知:分布式
服务器·网络·分布式·并发·通信·竞态
Web极客码1 小时前
MariaDB 将成为 cPanel 中的默认数据库
服务器·mariadb·cpanel
HackTwoHub2 小时前
等级保护现场测评系统重磅更新,支持 AI 接入,可录入全品类资产清单,自动化巡检核查,批量导出测评归档文件
运维·人工智能·安全·web安全·网络安全·自动化·系统安全
川石课堂软件测试2 小时前
安全测试|服务器安全加固方法
服务器·功能测试·测试工具·jmeter·mysql·web安全·单元测试