feat: 实现 WebSocket、mochi broker 与下行发布
This commit is contained in:
+36
-1
@@ -239,7 +239,42 @@
|
||||
|
||||
## 连接 N
|
||||
|
||||
暂无。
|
||||
### N1 / N2 2026-09-30
|
||||
|
||||
1. **未接线 `cmd/nixmsg`**
|
||||
- 原条款:serve 最终应挂上端口识别、broker、`/mqtt`。
|
||||
- 实际做法:本任务只交付 `internal/listener`、`internal/broker`;按总控要求不改 `cmd/nixmsg`。
|
||||
- 原因:避免与平台/总控并行改 wire 冲突;合并时再接线。
|
||||
- 备选方案:本分支顺带改 `wire.go`(与指令冲突)。
|
||||
- 影响:当前 `serve` 仍是 T0.4 的简单 `/healthz` 监听,不含 MQTT。
|
||||
|
||||
2. **`listen.addr` / `admin.addr` 仅端口为 0 时写入**
|
||||
- 原条款:DEVELOPMENT 4.1「端口写 0 时」写地址文件;T0.1 偏差曾改为 always write。
|
||||
- 实际做法:`listener.Server` 仅当配置地址端口为 `0` 时写 `listen.addr` / `admin.addr`。
|
||||
- 原因:本任务说明与 DEVELOPMENT 4.1 字面一致;T0.1 的 always write 在 `cmd/nixmsg`,本线未改。
|
||||
- 备选方案:接线时统一为 always write 以兼容 harness。
|
||||
- 影响:固定端口场景下 harness 若只读地址文件会读不到;接线时建议沿用 T0.1 超集或改 harness。
|
||||
|
||||
3. **登录校验为可替换接口,默认拒绝**
|
||||
- 原条款:第 5 节完整会话令牌/密码/锁定属 N3。
|
||||
- 实际做法:`broker.Authenticator` 接口 + 默认 `RejectAuthenticator`;内部错误在 `OnConnect` 返回 error;测试提供 `AllowAuthenticator`。
|
||||
- 原因:N3 范围;N2 需可跑通装配与钩子。
|
||||
- 备选方案:N2 内做假登录表(超出范围)。
|
||||
- 影响:真实端连不上直到 N3;总控接线时注入 Authenticator。
|
||||
|
||||
4. **大帧并发名额释放策略**
|
||||
- 原条款:DEVELOPMENT 7.5 大于 64KiB 全局同时不超过 64;PUBACK / 超时 / 断线释放。
|
||||
- 实际做法:发布前申请名额;QoS 0 发布成功立即释放;QoS 1 在 `OnQosComplete` 且 payload>64KiB 时释放,断线 `releaseAllLarge`;未单独做「确认超时」计时释放(确认超时属 M 线推送循环)。
|
||||
- 原因:N2 无投递确认计时器;与 M 线推送超时释放衔接。
|
||||
- 备选方案:broker 内对大帧自建超时(与 M 重复)。
|
||||
- 影响:若客户端永不 PUBACK 且不断线,名额可能占满直到断开;M 线超时踢线或回调 Disconnect 可释放。
|
||||
|
||||
5. **`OnPublishDropped` 仅打日志**
|
||||
- 原条款:清「已推送」标记并 1 秒后重推。
|
||||
- 实际做法:钩子记录 debug 日志;清标记/重推留给消息 M。
|
||||
- 原因:投递状态在 M/store,N2 无投递表。
|
||||
- 备选方案:N2 暴露回调给 M 注册。
|
||||
- 影响:接线后 M 需订阅或包装该钩子;当前接口可后续加 `OnPublishDropped` 回调字段。
|
||||
|
||||
## 消息 M
|
||||
|
||||
|
||||
Reference in New Issue
Block a user