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 兼容                                                       │
│  • 数据类型兼容                                                   │
│                                                                     │
└────────────────────────────────────────────────────────────────────┘
相关推荐
Eloudy1 小时前
互联网络设计过程中的一些 PPA 经验原则
网络·互联
Ruiery8 小时前
Linux 6.6内核 CPU 深度解析(七):调度器启动 — 从单核到多核,调度器分阶段点亮
linux·运维·服务器
50万马克的面包8 小时前
CSDN-栈队列数组-知识点整理
linux·运维·服务器
MicrosoftCloud8 小时前
用户权限 04|/etc/sudoers 安全配置:从最小授权到「别把 ALL 随便给人」
运维·安全·ubuntu·sudo·sudoers
国科安芯9 小时前
一颗当两颗用:ASC4T245S 的“两组独立 2 位 + 控制挂靠 VCCA“账
网络·电平转换·抗辐射·在轨服务
冯胤清9 小时前
《Jev-IDS:网络入侵检测一种系统模型》论文深度分析总结
网络
꯭自꯭闭꯭10 小时前
达梦事物特性及MVCC
linux·运维·数据库
91刘仁德11 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
Sarapines Programmer11 小时前
【Wireshark】安装与使用指南
网络·测试工具·wireshark
亚川楼宇自控系统数据中心厂家11 小时前
实验室智能化管理系统|人环物智一体化管控平台
运维