Skip to content

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"}
}

物联网设备通信协议文档