fix: 按 K-00 约定修复 Python SDK 断线重交与退避

This commit is contained in:
Nixevol
2026-09-30 16:24:13 +08:00
parent 55aa0ccf53
commit 537cef0e32
10 changed files with 564 additions and 126 deletions
+11 -2
View File
@@ -1180,6 +1180,15 @@
- 备选方案:沿用 attempt+base 双重翻倍;否决。
- 影响:仅 sdk/js。
### 复审修复 K-03
- 日期:2026-09-30
- 原条款:issue #60 及第二轮补充;DEVELOPMENT 第 9 节附录。
- 实际做法:Paho `reconnect_on_failure=False`;重连退避只维护计数 n;断线后在途发送新 rid 重交;回调经单一队列派发不持锁;fatal 收包路径同步处理;logout 把请求失败抛出;假传输不从 `__init__` 导出;AsyncClient 记录事件循环并 await 协程回调。
- 原因:与 K-00 对齐并修顶号互踢、回调死锁、断线永不重交。
- 备选方案:照搬旧 JS 双重翻倍;否决。
- 影响:仅 sdk/python。
## SDK 二 S2
### S2-PY/JAVA 1–3 2026-09-30
@@ -1221,8 +1230,8 @@
6. **Paho / HiveMQ 库内自动重连关闭,退避自管**
- 原条款:四种 SDK 同一套重连:1s 起加倍上限 30s ±30% 抖动,稳定 60s 恢复;每次 Clean Start、会话过期 0。
- 实际做法:两端均由 SDK 连接循环实现退避与停止条件;HiveMQ 不启库内 automaticReconnect;Paho 每次 `connect(..., clean_start=True)` 并设 `SessionExpiryInterval=0`。
- 原因:与 Go/JS 要求一致,避免两套重连。
- 实际做法:两端均由 SDK 连接循环实现退避与停止条件;HiveMQ 不启库内 automaticReconnect;Paho 创建 Client 时 `reconnect_on_failure=False`,每次 `connect(..., clean_start=True)` 并设 `SessionExpiryInterval=0`。
- 原因:paho 2.x 默认自动重连,被顶号后会两端互踢。
- 备选方案:依赖库自带重连再改 Clean Start(易漏)。
- 影响:无。