AQQBot
AQQBot copied to clipboard
WebSocket 连接断开或对端死机后存在无限等待风险,建议增加超时和心跳机制
您好,目前代码中 WebSocket 相关逻辑(如 AQQBotWebhookServer.kt)在连接断开或对端死机等异常情况下,未见实现主动超时断开、心跳包(如 ping/pong)、自动重连等机制。
虽然主类(如 AQQBot.kt)有定时检测 bot 状态并尝试重连的逻辑,但这只针对上层 bot 实例,对于底层 WebSocket 连接因网络异常或对端无响应导致的“假死”,依然可能出现无限等待或资源长期占用的风险。
建议
- 在 WebSocket 服务器和客户端实现心跳包(如定时发送 ping/pong),检测连接存活状态。
- 设置合理的超时时间,如一段时间内无响应自动断开连接并尝试重连。
- 对于
onClose、onError等事件,增加日志与重连逻辑,避免长时间挂起。
复现方式
- 启动 bot 并建立 WebSocket 连接,让对端异常关闭(如 kill 掉进程或断网),观察 bot 是否能及时感知并恢复连接。
- 若对端失联但连接未及时断开,可验证“无限等待”现象。
相关代码位置
common/src/main/kotlin/top/alazeprt/aqqbot/api/webhook/AQQBotWebhookServer.ktcommon/src/main/kotlin/top/alazeprt/aqqbot/AQQBot.kt
期望行为
- WebSocket 连接异常时能自动超时关闭并尝试重连,避免资源泄漏或功能失效。
by Copilot