架构与时序
PSSP 数据如何流动
本页跟踪一个应用客户端——未来的设备或服务器端集成——到 PSSP Broker,再到一个或多个订阅者的完整路径。不透明负载在 Broker 内不会改变形式。
系统视图
未来任何 OX Device 或 WebService 都会成为普通的 PSSP 发布者、订阅者,或同时具备两种身份。两者都不需要嵌入 Broker 或桌面客户端项目中。
1. 安全连接与会话密钥流程
- Broker 只在认证成功后创建 AES 密钥。
- 密钥和 nonce 前缀对该 TCP 会话唯一,且仅存在于 RAM 中。
- TCP 关闭/断开时,Broker 删除会话密钥、序列状态、UDP 关联和连接状态。
独立模式
关闭 TLS 且启用 AES 时,客户端验证 Broker X25519 公钥固定值,通过 X25519 + HKDF 在本地派生 AES,并加密 AUTH 与后续记录;对称密钥不会被发送。有意关闭 TLS/AES 并设置 allow_insecure_tcp_udp = true 时,会省略密钥步骤,所有凭据/记录均为明文网络流量。
2. QoS 1 发布、缓存与投递
- 订阅者在发布者写入新数据前建立过滤器。
- 发布者通过 TCP QoS 1 发送不透明负载。发布者重试标识可避免重试创建重复主题条目。
- Broker 将数据加入主题有限环,然后以
PUBACK确认接收。慢订阅者不能延迟该确认。 - Broker 向匹配订阅者发送包含原始负载的
MESSAGE。 - 订阅者应用完成自己的交接并发送
MSGACK。只要数据仍被保留,该游标即可支持后续恢复。
3. 重连与有界恢复
订阅者恢复状态会在 Broker 内存中保存 subscriber_resume_ttl_seconds 指定的时长。它不能在 Broker 重启后保留。GAP 明确表示 PSSP 本身无法重新创建已删除的数据。
4. QoS 0 UDP 绑定与心跳
QoS 0 不返回 PUBACK,不缓存数据,也不重放。如果 TCP 会话关闭,关联令牌将被删除,UDP 源也不再有效。