96SEO 2026-08-01 19:09 4
最近在使用 Hermes Agent 接入 QQBot 时遇到了一个比较典型的痛点Hermes 本体看起来是正常的。gateway 进程也没有直接挂掉,但 QQ 端机器人运行一段时间后就会突然无法响应,表现为“灵魂不在线”。
一开始这个问题很容易被误判成网络波动,或者 QQ 网站偶发不稳定。但继续看日志后发现,问题并不是简单的进程异常。而是 QQBot 的 WebSocket 长连接进入了一种“进程还活着,但网站链路不健康”的状态。

从服务状态看,Hermes gateway 仍然在运行,微信 bot 也没有出现一样的问题。可以先排除 Hermes 主体、模型服务、服务器整体资源这类公共依赖问题。
但 QQBot 日志里反复出现类似内容:
-- ::,WARNING gateway.platforms.qqbot.adapter: WebSocket error: WebSocket closed
-- ::,INFO gateway.platforms.qqbot.adapter: Reconnecting in 2s ...
-- ::,INFO gateway.platforms.qqbot.adapter: WebSocket connected to wss://api.sgroup.qq.com/websocket
-- ::,INFO gateway.platforms.qqbot.adapter: Reconnected
-- ::,INFO gateway.platforms.qqbot.adapter: Resume sent
-- ::,INFO gateway.platforms.qqbot.adapter: Session resumed
-- ::,WARNING gateway.platforms.qqbot.adapter: WebSocket error: WebSocket closed
更关键的是异常后期不是偶发断线。而是进入了一个比较固定的循环:
-- ::,WARNING gateway.platforms.qqbot.adapter: WebSocket error: WebSocket closed
-- ::,INFO gateway.platforms.qqbot.adapter: Reconnecting in 2s ...
-- ::,INFO gateway.platforms.qqbot.adapter: WebSocket connected to wss://api.sgroup.qq.com/websocket
-- ::,INFO gateway.platforms.qqbot.adapter: Reconnected
-- ::,INFO gateway.platforms.qqbot.adapter: Resume sent
-- ::,INFO gateway.platforms.qqbot.adapter: Session resumed
-- ::,WARNING gateway.platforms.qqbot.adapter: WebSocket error: WebSocket closed
...
说白了QQBot 并不是完全连不上,而是每次看起来恢复了随后又很快断开。
在源码逻辑中,当 WebSocket 收到 Hello 事件后adapter 会根据当前是否保存了 session_id 和 seq 来决定发送 Identify 还是 Resume。Resume 成功后QQ Gateway 会下发 RESUMED 事件,adapter 记录 Session resumed 日志。
但这里的主要是:Session resumed只说明服务端接受了这次 Resume,并不代表后续 heartbeat 任务一定还在正常运行。真正维持长连接的是 _heartbeat_loop。如果在前面的 session timeout 或 WebSocket 断开过程中,adapter 的状态变量处理不当,导致 heartbeat loop 退出。那么后续即使 _listen_loop 重新打开了 WebSocket,而且 Resume 成功,新连接也可能没有持续发送 heartbeat。
adapter.py L299: self._listen_task = asyncio.create_task)
adapter.py L300: self._heartbeat_task = asyncio.create_task)
# _heartbeat_reconnect里不会重建 heartbeat task。
_mark_disconnected 把 _running 置为 False
base.py L1309: def _mark_disconnected:
base.py L1310: self._running = False ← 这是问题根源
_listen_loop 调用 _mark_disconnected
adapter.py L592: logger.warning
adapter.py L593: self._mark_disconnected ← _running = False
adapter.py L600: if await self._reconnect:
) 恢复 。但中间存在 race window
adapter.py L621: await self._open_ws
adapter.py L622: self._mark_connected ← _running = True
while self._running:
adapter.py L655: while self._running:
# 此时 _running = False 就永久退出 loop
adapter.py L656: await asyncio.sleep
adapter.py L661: await self._ws.send_json
这次问题不能简单理解为“Resume 失败”,而是“Resume 表面成功,但恢复后的连接没有被 heartbeat 稳定保活”。这是
对照点:
The difference explains *** 微信 bot 能够保持稳定,而 QQ Bot 在长时间运行后会陷入 “WebSocket closed → Reconnect → Session resumed →
关闭” 的死循环。) 和 )
. 为什么微信 bot 没有一样的问题
微信 Bot QQ Bot
保活方式 Poll 本身即保活。无需额外心跳 必须每 ~33 秒发送一次心跳 op
断线恢复 Poll 循环自带重试 需要 ) + _mark_connected
Race Condition 无 _mark_disconnected 与 heartbeat 状态竞争
. 和 GitHub Issue # 的对应关系
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback