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 兼容                                                       │
│  • 数据类型兼容                                                   │
│                                                                     │
└────────────────────────────────────────────────────────────────────┘
相关推荐
小则又沐风a几秒前
深入了解进程概念 第二章
java·linux·服务器·前端
CCPC不拿奖不改名几秒前
PostgreSQL数据库部署linux服务器流程
linux·服务器·数据库·windows·python·docker·postgresql
MXsoft6182 分钟前
**运维标准化建设:让杂乱无章的工作变成可复制****流程**
运维
ZC跨境爬虫5 分钟前
跟着 MDN 学 HTML day_60:(表单与按钮技能测试实战)
服务器·前端·javascript·数据库·ui·html
William.csj11 分钟前
Linux——服务器后台运行程序指南(包含 Python 与 .sh 脚本实战)
linux·服务器·python
maosheng114611 分钟前
第二次作业(RHCE(https+http))
运维
秦歌66614 分钟前
Agent Skills详解
服务器·前端·数据库
一路往蓝-Anbo16 分钟前
第四章:手撕协议栈 —— 缓冲区与结构体数据的 Mock 技巧
网络·stm32·单片机·嵌入式硬件·软件工程·tdd
杨云龙UP18 分钟前
MySQL主库高峰期备份引发504故障:从库手动切换接管 + 主从恢复同步 + Docker版DB2重启实战_2026-05-17
linux·运维·数据库·mysql·docker·容器·centos
号码认证服务26 分钟前
小米、OPPO、VIVO手机支持号码认证显示公司名吗?
java·服务器·网络·经验分享·智能手机·云计算·php