feat: 实现 Python 与 Java SDK 连接收发及其余接口

This commit is contained in:
Nixevol
2026-09-30 07:06:30 +08:00
parent 9650cbff76
commit d357082f3d
27 changed files with 4515 additions and 1 deletions
+43 -1
View File
@@ -465,7 +465,49 @@
## SDK 二 S2
暂无。
### S2-PY/JAVA 1–3 2026-09-30
1. **HiveMQ「websocket 模块」用 netty-codec-http 显式依赖**
- 原条款:DEVELOPMENT 2.3「HiveMQ MQTT Client,加上 websocket 模块」。
- 实际做法:依赖 `com.hivemq:hivemq-mqtt-client:1.3.5`,并额外声明 `io.netty:netty-codec-http`;连接时用 `webSocketConfig().subprotocol("mqtt")`。未使用独立 artifact `hivemq-mqtt-client-websocket`(Maven Central 上该坐标未作为独立稳定模块发布)。
- 原因:与 HiveMQ 官方 WebSocket 用法一致,满足子协议 `mqtt`。
- 备选方案:若日后官方拆出独立 websocket 模块再改坐标。
- 影响:无行为差异。
2. **JSON 库选型**
- 原条款:未指定 Java JSON 库。
- 实际做法:Java 用 Gson(`disableHtmlEscaping`);Python 用标准库 `json`(`ensure_ascii=False`)。
- 原因:满足「不转义 HTML / 非 ASCII」;不引入过重依赖。
- 备选方案:Jackson。
- 影响:无。
3. **假传输单测,未接真实服务器**
- 原条款:任务 1–3 单元测试用假传输;任务 4 才做接入清单。
- 实际做法:Python `FakeTransport`、Java `FakeTransport` 覆盖 Clean Start、去重再 ack、本地超限、令牌回调、重交不改 `send_at_ms` / 消息号;未做对真实服务器的接入清单(任务 4)。
- 原因:本波范围。
- 备选方案:无。
- 影响:真实联调留待 S2 任务 4。
4. **Python 发布元数据**
- 原条款:`license = { file = "LICENSE" }` 与专有分类。
- 实际做法:`pyproject.toml` 已按此写;包内复制仓库根 `LICENSE`。未配置/执行 PyPI 发布。
- 原因:发布在阶段 3。
- 备选方案:无。
- 影响:无。
5. **Java 编译器用 JDK 21,目标字节码 8**
- 原条款:字节码目标 Java 8。
- 实际做法:`maven.compiler.release=8`,本机用 Temurin 21 编译。
- 原因:环境已有 JDK 21。
- 备选方案:用 JDK 8 工具链。
- 影响:无。
6. **Paho / HiveMQ 库内自动重连关闭,退避自管**
- 原条款:四种 SDK 同一套重连:1s 起加倍上限 30s ±30% 抖动,稳定 60s 恢复;每次 Clean Start、会话过期 0。
- 实际做法:两端均由 SDK 连接循环实现退避与停止条件;HiveMQ 不启库内 automaticReconnect;Paho 每次 `connect(..., clean_start=True)` 并设 `SessionExpiryInterval=0`。
- 原因:与 Go/JS 要求一致,避免两套重连。
- 备选方案:依赖库自带重连再改 Clean Start(易漏)。
- 影响:无。
## 测试交付 Q