[R3-06][medium] Python 与 Java 首次握手失败后仍在后台重连 #70

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

现象

基线 origin/main 0c9b459。K-00 约定:首次连接超时或握手失败应停止重连,并向 connect() 返回未连接。

  • Python:connect() 看到 _handshake_error 直接抛错,没有置 _stop_reconnect。等 CONNACK 超时的路径会停,hello 失败这条不会。工作线程仍按退避重连,应用以为没连上,随后却可能变成在线并收到下行。内部超时文案还是 busy。
  • Java:有 handshakeError 就抛出,不走把 stopReconnect 设为停止的分支。循环只要 wantConnected && !stopReconnect 就继续连。
  • 对照:Go connect.go 与 JS client.ts 的首次失败会拆掉连接并停止重连。

另有一处低优先级、同一 Java 文件:rate_limited 把 inflightSends 减了两次。Python 只减一次。本地「同时在途不超过 100」会松一档。

位置

  • sdk/python/src/nixmsg/client.py:connect() 对 _handshake_error 的处理,以及重连循环
  • sdk/java/src/main/java/asia/asio/nixmsg/Client.java:首次握手失败与 rate_limited 的 inflight 计数

方案

首次 connect() 在 hello / 握手失败或超时后,置停止重连,返回 not_connected(不要用 busy 表示没建起会话)。后台循环看到该标志后不得再连。应用再次调用 connect() 才重新开始。

Java 的 rate_limited 与 Python 一样只减一次在途计数,然后换新 rid 再排队。

补测试:首次 hello 失败后不再自动重连;再次 connect() 可以重新连。Java 限速一次后在途计数只减 1。

约束

只改 sdk/python/ 与 sdk/java/。不要改 Go / JS 的重连公式。偏差节 ### 复审修复 R3-06。

## 现象 基线 `origin/main` `0c9b459`。K-00 约定:首次连接超时或握手失败应停止重连,并向 `connect()` 返回未连接。 - Python:`connect()` 看到 `_handshake_error` 直接抛错,没有置 `_stop_reconnect`。等 CONNACK 超时的路径会停,hello 失败这条不会。工作线程仍按退避重连,应用以为没连上,随后却可能变成在线并收到下行。内部超时文案还是 `busy`。 - Java:有 `handshakeError` 就抛出,不走把 `stopReconnect` 设为停止的分支。循环只要 `wantConnected && !stopReconnect` 就继续连。 - 对照:Go `connect.go` 与 JS `client.ts` 的首次失败会拆掉连接并停止重连。 另有一处低优先级、同一 Java 文件:`rate_limited` 把 `inflightSends` 减了两次。Python 只减一次。本地「同时在途不超过 100」会松一档。 ## 位置 - `sdk/python/src/nixmsg/client.py`:`connect()` 对 `_handshake_error` 的处理,以及重连循环 - `sdk/java/src/main/java/asia/asio/nixmsg/Client.java`:首次握手失败与 `rate_limited` 的 inflight 计数 ## 方案 首次 `connect()` 在 hello / 握手失败或超时后,置停止重连,返回 `not_connected`(不要用 `busy` 表示没建起会话)。后台循环看到该标志后不得再连。应用再次调用 `connect()` 才重新开始。 Java 的 `rate_limited` 与 Python 一样只减一次在途计数,然后换新 `rid` 再排队。 补测试:首次 hello 失败后不再自动重连;再次 `connect()` 可以重新连。Java 限速一次后在途计数只减 1。 ## 约束 只改 `sdk/python/` 与 `sdk/java/`。不要改 Go / JS 的重连公式。偏差节 `### 复审修复 R3-06`。
Author
Owner

R3-06 / #70 ??( eat/fix-r3-70-py-java)

HEAD: 4d2f6f0d03f4c098e759e452a880df568bc44640

??

  • Python/Java:?? hello/?????????????,connect() ?? not_connected;?? connect() ????
  • ??????? busy ???????
  • Java:rate_limited ????????

??

  • Java mvn test -Dtest=K00Test:18 ??(??????????????? 1)
  • Python:??? paho;?? paho ????;unittest tests.test_k00 tests.test_client(FakeTransport)21 ??
  • ?? main
## R3-06 / #70 ??( eat/fix-r3-70-py-java) **HEAD:** `4d2f6f0d03f4c098e759e452a880df568bc44640` ### ?? - Python/Java:?? hello/?????????????,`connect()` ?? `not_connected`;?? `connect()` ???? - ??????? `busy` ??????? - Java:`rate_limited` ???????? ### ?? - Java `mvn test -Dtest=K00Test`:18 ??(??????????????? 1) - Python:??? paho;?? paho ????;`unittest tests.test_k00 tests.test_client`(FakeTransport)21 ?? - ?? main
Author
Owner

已合入 main:9c6de00 (#70);当前 origin/main HEAD 2d1dfd7。

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