Skip to content

fix: preserve reverse WebSocket connections after reconnect - #10155

Open
wcqqq1214 wants to merge 1 commit into
AstrBotDevs:masterfrom
wcqqq1214:fix/10154-reverse-ws-reconnect
Open

wcqqq1214 wants to merge 1 commit into
AstrBotDevs:masterfrom
wcqqq1214:fix/10154-reverse-ws-reconnect

Conversation

@wcqqq1214

@wcqqq1214 wcqqq1214 commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Fixes #10154. After a reconnect with the same X-Self-ID, delayed cleanup of the old connection can remove the new connection's registration, causing ApiNotAvailable on sends.

Modifications

Override CQHttp cleanup locally in the adapter: delete the registration only if it still belongs to the closing WebSocket.

  • This is NOT a breaking change. / 这不是一个破坏性变更。

Screenshots or Test Results

  • Connect A and B with the same ID, then close A: B keeps receiving and sending messages (10/10 rounds passed).
  • Simulate dropped traffic and delayed cleanup with a temporary 3-second server read timeout: original code fails; fixed code preserves B. This checks application-level timeout, not OS TCP timeout.
  • Existing OneBot tests: 19 passed. Ruff, docs build, and diff checks passed.

Checklist

  • 😊 If there are new features added in the PR, I have discussed it with the authors through issues/emails, etc.
    / 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。

  • 👀 My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
    / 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”

  • 📚 I checked the affected WebUI instructions and screenshots in docs/zh and docs/en against the changed navigation, page structure, and labels, and updated them in this PR (or explained why no documentation update is needed). For renamed, moved, or merged entry points, I included an old entry → new entry mapping in the documentation and changelog.
    / 我已对照变化后的 WebUI 入口、页面结构和术语,核对并在本 PR 中更新 docs/zhdocs/en 的相关操作说明与截图(或说明无需更新文档的原因)。入口改名、移动或合并时,已在文档和 changelog 中补充 旧入口 → 新入口 对照。

    No WebUI changes; documentation updates are not needed.

  • 🤓 I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in requirements.txt and pyproject.toml.
    / 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到 requirements.txtpyproject.toml 文件相应位置。

  • 😮 My changes do not introduce malicious code.
    / 我的更改没有引入恶意代码。

Summary by Sourcery

Bug Fixes:

  • Preserve the active reverse WebSocket registration when an older connection with the same self-ID is cleaned up after reconnecting.

@wcqqq1214
wcqqq1214 marked this pull request as ready for review September 20, 2026 12:04

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant