feat: 实现 Go 与 JS/TS SDK 连接收发与其余接口
This commit is contained in:
+40
-1
@@ -422,7 +422,46 @@
|
||||
|
||||
## SDK 一 S1
|
||||
|
||||
暂无。
|
||||
### S1.1 传输层可注入假实现(Go / JS)
|
||||
|
||||
- 相关文档:DEVELOPMENT 第 9 节单元测试要求「用假的 MQTT/HTTP,不要起真实服务器」。
|
||||
- 实际做法:Go 与 JS SDK 均以 `transport` 接口隔离 MQTT;单测注入 `FakeTransport`,自动回复 `hello`、可注入下行帧与 `resp`。真实路径仍分别走 autopaho / MQTT.js。
|
||||
- 原因:否则无法在无服务端时稳定覆盖 Clean Start、去重再 ack、本地超限、令牌回调、重交不变号。
|
||||
- 备选:起嵌入式 mochi;被否是因为任务明确禁止真实服务器,且会与并行 Agent 抢端口。
|
||||
|
||||
### S1.2 Go autopaho `OnConnectionUp` 内握手改异步
|
||||
|
||||
- 相关文档:autopaho 要求 `OnConnectionUp` 不得阻塞;DEVELOPMENT 第 9 节要求订阅 down 后发 `hello` 并等待成功。
|
||||
- 实际做法:订阅与 `hello` 放在 `OnConnectionUp` 触发的 goroutine 中;`Connect` 轮询 `handshook` 直至超时(默认 30s)。
|
||||
- 原因:在回调里同步 `hello` 会违反库约束并可能死锁。
|
||||
- 备选:自定义连接循环不用 autopaho 的 `OnConnectionUp`;未采用,因文档指定 autopaho。
|
||||
|
||||
### S1.3 重连退避与「稳定在线 60s」状态机自管
|
||||
|
||||
- 相关文档:DEVELOPMENT 第 9 节退避规则。
|
||||
- 实际做法:自实现 `reconnectBackoff`(1s 起、加倍、上限 30s、±30% 抖动;在线满 60s 将 base 恢复为 1s)。Go 将其接到 autopaho 的 `ReconnectBackoff`;JS 因 `reconnectPeriod: 0` 自管重连循环并使用同一算法。
|
||||
- 原因:autopaho 自带指数退避参数模型与文档不完全一致,且每次 `establishServerConnection` 会重置 attempt,无法单独表达「未稳定在线则跨周期继续抬升」。
|
||||
- 备选:直接用 `autopaho.NewExponentialBackoff`;未采用,以免与文档抖动与 60s 恢复语义偏离。
|
||||
|
||||
### S1.4 Go 模块许可证标注
|
||||
|
||||
- 相关文档:DEVELOPMENT 第 9 节「Go 写 SEE LICENSE,包里带上仓库根目录 LICENSE」。
|
||||
- 实际做法:`sdk/go/LICENSE` 为仓库根 `LICENSE` 副本;`doc.go` 注明专有许可见 LICENSE(Go modules 无 npm 式 license 字段)。
|
||||
- 原因:go.mod 无标准 license 键。
|
||||
- 备选:另加 `LICENSE.md` 指向根目录相对路径;副本更利于 `go get` 后独立阅读。
|
||||
|
||||
### S1.5 JS 回调命名与文档概念名
|
||||
|
||||
- 相关文档:第 9 节概念方法名 `onSession` / `onMessage` 等。
|
||||
- 实际做法:TypeScript 对外提供 `onSessionHandler`、`onMessageHandler` 等,避免与 EventEmitter 风格或属性赋值混淆;语义与文档一致。
|
||||
- 原因:`onSession` 作方法名在部分风格指南中易被误认为事件订阅属性。
|
||||
- 备选:完全同名方法;可在任务 5 文档化时再加别名。
|
||||
|
||||
### S1.6 未做范围
|
||||
|
||||
- 任务 4 真实服务器接入清单(15 条)未做,按总控安排留给后续波次。
|
||||
- 任务 5 打包试跑/README/示例未做(本期只完成任务 1–3 与许可证文件副本;JS 已能 `npm run build` 出 ESM+CJS,但未发布 npm)。
|
||||
- Go 裸 TCP(`AllowTCP`)与 JS `allowTcp` 已接线,但无集成级验证(属接入清单)。
|
||||
|
||||
## SDK 二 S2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user