[R3-05][high] JS SDK 传输失败后发送队列不再继续 #69

Closed
opened 2026-09-30 17:18:25 +08:00 by nixevol · 2 comments
Owner

现象

基线 origin/main 0c9b459。publishUp 抛出的不是协议 APIError 时,代码会换新 rid 并清掉 inflight,然后 return。没有调用 drainSendQueue。连接若没有因此断开、hello 也不会再走一遍,send() 的 Promise 一直不结束。rate_limited 路径会 schedule 再泵,传输错误这条没有。

位置

  • sdk/js/src/client.ts:发送 catch 里 !(e instanceof APIError) 的分支
  • 对照:同文件 rate_limited 分支的 schedule(() => void this.drainSendQueue(), wait),以及 doHello 里的唤醒

方案

传输失败且未 stopReconnect 时,换新 rid 后安排 drainSendQueue(可立即或按现有退避)。stopReconnect 时结束这次 send 并返回错误。不要只 return。

补测试:假传输 publishUp 失败一次后,队列会再次发送,且 rid 已变、id / body / send_at_ms 保留。

约束

只改 sdk/js/。不要改 Go / Python / Java。不要对同一段等待再乘一次抖动。偏差节 ### 复审修复 R3-05。

## 现象 基线 `origin/main` `0c9b459`。`publishUp` 抛出的不是协议 `APIError` 时,代码会换新 `rid` 并清掉 inflight,然后 `return`。没有调用 `drainSendQueue`。连接若没有因此断开、hello 也不会再走一遍,`send()` 的 Promise 一直不结束。`rate_limited` 路径会 `schedule` 再泵,传输错误这条没有。 ## 位置 - `sdk/js/src/client.ts`:发送 catch 里 `!(e instanceof APIError)` 的分支 - 对照:同文件 `rate_limited` 分支的 `schedule(() => void this.drainSendQueue(), wait)`,以及 `doHello` 里的唤醒 ## 方案 传输失败且未 `stopReconnect` 时,换新 `rid` 后安排 `drainSendQueue`(可立即或按现有退避)。`stopReconnect` 时结束这次 `send` 并返回错误。不要只 `return`。 补测试:假传输 `publishUp` 失败一次后,队列会再次发送,且 `rid` 已变、`id` / `body` / `send_at_ms` 保留。 ## 约束 只改 `sdk/js/`。不要改 Go / Python / Java。不要对同一段等待再乘一次抖动。偏差节 `### 复审修复 R3-05`。
Author
Owner

R3-05 ????

??:feat/fix-r3-69-js-sdk
HEAD:7f308001927e9437b5497daa2c8562b1fcc6a920

??

  • sdk/js/src/client.ts:publishUp ????? APIError ?? stopReconnect ?,?? rid ??? drainSendQueue;? stopReconnect ? finishSendErr?
  • ??:????????????? rid ??,id/??/send_at_ms ???
  • docs/DEVIATIONS.md ??????? R3-05??

??

? sdk/js ? npm test:4 files / 49 tests ?????

???,??? main?

## R3-05 ???? ??:`feat/fix-r3-69-js-sdk` HEAD:`7f308001927e9437b5497daa2c8562b1fcc6a920` ### ?? - `sdk/js/src/client.ts`:`publishUp` ????? `APIError` ?? `stopReconnect` ?,?? `rid` ??? `drainSendQueue`;? `stopReconnect` ? `finishSendErr`? - ??:????????????? `rid` ??,`id`/??/`send_at_ms` ??? - `docs/DEVIATIONS.md` ??????? R3-05?? ### ?? ? `sdk/js` ? `npm test`:4 files / 49 tests ????? ???,??? `main`?
Author
Owner

已合入 main:08c08de (#69);当前 origin/main HEAD 2d1dfd7。

已合入 main:`08c08de` (#69);当前 origin/main HEAD `2d1dfd7`。
Sign in to join this conversation.