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 兼容                                                       │
│  • 数据类型兼容                                                   │
│                                                                     │
└────────────────────────────────────────────────────────────────────┘
相关推荐
syagain_zsx13 小时前
Linux进程全面解析:从基础到高级管理(2/3)
linux·运维·服务器
洛水水13 小时前
图床项目实现:MD5秒传 + 个人文件列表 + 图片分享等功能的完善
服务器·网络
Irissgwe13 小时前
8-1\IP 分片和组装的具体过程
linux·网络·tcp/ip·网络层·分片·组装
爱吃泡芙的小白白13 小时前
无人机机巢:低空经济的自动化基石,一文读懂其原理、应用与未来
运维·自动化·无人机·低空经济
翼龙云_cloud13 小时前
阿里云代理商:轻量服务器建站常见问题及解决方案汇总
运维·阿里云·云计算
唔6613 小时前
(一)一套完整的自动化脚本,一键搭建5节点负载均衡集群
运维·自动化·负载均衡
闪电悠米13 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
豆瓣鸡13 小时前
Docker快速入门
运维·docker·容器
Shadow(⊙o⊙)13 小时前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
CQU_JIAKE14 小时前
6.6aaaaaa
linux·运维·服务器