Appearance
FDP-P2P 协议概述
FDP-P2P是FDP协议族的核心组件,定义了节点间点对点通信的规范。
设计理念
邮箱模式
FDP-P2P采用"邮箱模式"进行通信:
┌─────────────┐ ┌─────────────┐
│ 节点 A │ │ 节点 B │
│ │ │ │
│ ┌───────┐ │ 发任务 │ ┌───────┐ │
│ │ 邮箱A │◄─┼──────────┼──│ │ │
│ └───────┘ │ │ │ │ │
│ │ │ │ │ │
│ ┌───────┐ │ 回复 │ │ 邮箱B │ │
│ │ │──┼──────────┼─►│ │ │
│ └───────┘ │ │ └───────┘ │
└─────────────┘ └─────────────┘- 每个节点拥有自己的"邮箱"(主题命名空间)
- 发送消息 = 往对方邮箱投递
- 接收消息 = 监听自己的邮箱
- 节点只能读取自己的邮箱,不能读取他人邮箱
核心特性
| 特性 | 说明 |
|---|---|
| 点对点 | 节点直接通信,无需中心调度 |
| 异步 | 发送后无需等待,通过回调获取结果 |
| 可靠 | 配合QoS 1和持久会话,保证消息送达 |
| 可追踪 | 完整的任务生命周期状态流转 |
通信流程
消息类型
FDP-P2P定义了6种消息类型:
| 消息类型 | 方向 | 用途 |
|---|---|---|
| Pending | 发送方→接收方 | 发送任务 |
| Ack | 接收方→发送方 | 确认收到(可选) |
| Progress | 接收方→发送方 | 进度更新(可选) |
| Complete | 接收方→发送方 | 任务完成 |
| Failed | 接收方→发送方 | 任务失败 |
| Status | 节点→订阅者 | 节点状态广播 |
文档导航
| 文档 | 内容 |
|---|---|
| 通信模型 | 主题设计、消息结构体定义 |
| 任务生命周期 | 状态流转、时序图、过期处理 |
| MQTT实现指南 | MQTT场景下的实现细节、ACL规则 |
| 高级特性 | 持久会话、遗嘱消息、QoS、保留消息 |
快速示例
发送任务
json
// 发布到: nodes/device-B/pending
{
"sender": "app-A",
"receiver": "device-B",
"msg_id": "550e8400-e29b-41d4-a716-446655440000",
"action": "unlock",
"time": 1700000000,
"exp": 1700000060,
"value": {"door": "front"}
}接收回复
json
// 订阅: nodes/app-A/complete
{
"msg_id": "550e8400-e29b-41d4-a716-446655440000",
"value": {"status": "unlocked"}
}