文章目录
- 1. 概述
- 2. 发现流程
- 3. 内置端点
- 4. ParticipantProxyData 内容
- 5. 两种 PDP 实现
- 6. 与 EDP 的关系
- 7. 总结
1. 概述
PDP是 RTPS 协议中用于发现参与者 (Participant)的协议,是 DDS 发现机制的第一步。
2. 发现流程
┌─────────────────────────────────────────────────────────────────────┐ │ PDP 发现流程 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ Participant A Participant B │ │ │ │ │ │ │ 1. 定时广播 PARTICIPANT_DATA │ │ │─────────────────────────────────▶│ 收到对方的参与者信息 │ │ │ │ │ │ │◀─────────────────────────────────│ 广播 PARTICIPANT_DATA │ │ │ 收到对方的参与者信息 │ │ │ │ │ │ │ │ 2. 创建 ParticipantProxy │ │ │ │ │ 2. 创建 ParticipantProxy │ │ │ │ │ │ │ 3. 启动 EDP │ │ │ │◀─────────────────────────────────│ 3. 启动 EDP │ │ │ │ │ └─────────────────────────────────────────────────────────────────────┘3. 内置端点
PDP 使用SPDP (Simple Participant Discovery Protocol)的内置端点:
| 内置端点 | 说明 |
|---|---|
| SPDP Writer | 广播本地 Participant 信息 |
| SPDP Reader | 接收远程 Participant 信息 |
4. ParticipantProxyData 内容
structParticipantProxyData{// 协议版本ProtocolVersion_t protocolVersion;// 厂商 IDVendorId_t vendorId;// 参与者 GUID 前缀GuidPrefix_t guidPrefix;// 参与者名称string_255 participant_name;// 元流量地址 (发现用)LocatorList_t metatraffic_locators;// 默认单播地址LocatorList_t default_unicast_locators;// 存活时间Duration_t leaseDuration;// 安全相关// ...};5. 两种 PDP 实现
| 实现 | 说明 |
|---|---|
| PDPSimple | 简单实现,广播到多播地址 |
| PDPServer | 服务器模式,客户端连接服务器获取参与者列表 |
6. 与 EDP 的关系
┌────────────────────────────────────────────────────────────────────┐ │ PDP 与 EDP 的关系 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ PDP: 发现 Participant │ │ ──────────────────────────────────────────────────────────────── │ │ 1. SPDP Writer 广播 PARTICIPANT_DATA │ │ 2. 收到远程 Participant,创建 ParticipantProxy │ │ 3. 触发 onParticipantMatched 回调 │ │ │ │ EDP: 发现 Endpoint │ │ ──────────────────────────────────────────────────────────────── │ │ 1. SEDP Writer 广播 PUBLICATION_DATA / SUBSCRIPTION_DATA │ │ 2. 收到远程 Endpoint,进行匹配 │ │ 3. 触发 on_writer_matched / on_reader_matched 回调 │ │ │ │ 顺序: PDP → EDP (先有 Participant 才能有 Endpoint) │ │ │ └────────────────────────────────────────────────────────────────────┘7. 总结
┌────────────────────────────────────────────────────────────────────┐ │ PDP 总结 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ 职责: 发现同一 Domain 内的所有 Participant │ │ │ │ 实现: SPDP (Simple Participant Discovery Protocol) │ │ │ │ 内置端点: │ │ • SPDP Writer - 广播本地 Participant 信息 │ │ • SPDP Reader - 接收远程 Participant 信息 │ │ │ │ 消息: PARTICANT_DATA │ │ │ │ 与 EDP 关系: │ │ • PDP 先于 EDP 执行 │ │ • PDP 发现 Participant │ │ • EDP 发现 Endpoint (Writer/Reader) │ │ │ └────────────────────────────────────────────────────────────────────┘