Skip to content

WebSocket 连接断开或对端死机后存在无限等待风险,建议增加超时和心跳机制 #143

@mike-brown8

Description

@mike-brown8

您好,目前代码中 WebSocket 相关逻辑(如 AQQBotWebhookServer.kt)在连接断开或对端死机等异常情况下,未见实现主动超时断开、心跳包(如 ping/pong)、自动重连等机制。
虽然主类(如 AQQBot.kt)有定时检测 bot 状态并尝试重连的逻辑,但这只针对上层 bot 实例,对于底层 WebSocket 连接因网络异常或对端无响应导致的“假死”,依然可能出现无限等待或资源长期占用的风险。

建议

  1. 在 WebSocket 服务器和客户端实现心跳包(如定时发送 ping/pong),检测连接存活状态。
  2. 设置合理的超时时间,如一段时间内无响应自动断开连接并尝试重连。
  3. 对于 onCloseonError 等事件,增加日志与重连逻辑,避免长时间挂起。

复现方式

  • 启动 bot 并建立 WebSocket 连接,让对端异常关闭(如 kill 掉进程或断网),观察 bot 是否能及时感知并恢复连接。
  • 若对端失联但连接未及时断开,可验证“无限等待”现象。

相关代码位置

  • common/src/main/kotlin/top/alazeprt/aqqbot/api/webhook/AQQBotWebhookServer.kt
  • common/src/main/kotlin/top/alazeprt/aqqbot/AQQBot.kt

期望行为

  • WebSocket 连接异常时能自动超时关闭并尝试重连,避免资源泄漏或功能失效。

by Copilot

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions