Skip to content

OpenClaw Slack socket-mode 连接变陈旧:ping/pong 超时导致反复重启

问题

使用 Slack socket-mode 渠道时,Gateway 日志反复出现 pong timeout 错误,随后触发 stale-socket 重启,但重启后问题依然循环出现:

[WARN] Slack: pong timeout - connection stale, restarting...
[INFO] Slack socket-mode: restarting connection...

此问题从 OpenClaw 2026.4.1 起作为回归引入,Windows Server 环境尤为明显。健康监控正确触发了重启,但根本原因(ping 超时阈值过短)未被修复,导致重启后继续循环。

根本原因:WebSocket 客户端的 ping 超时设定为 5000ms,在网络延迟稍高的环境(Windows Server、部分云主机)下,pong 响应未能在窗口内到达,健康监控误判连接陈旧。同时,stale-socket 重启缺少指数退避,导致连续快速重启反而加重问题。

关联 PR:#68253(社区提交修复,等待合并)。

解决方案

方案一:临时提高 ping 超时(配置文件)

在 OpenClaw 配置中调整 Slack socket-mode 的超时参数:

json5
{
  "channels": {
    "slack": {
      "socketMode": {
        "pingTimeoutMs": 15000,
        "reconnectBackoffMs": 2000
      }
    }
  }
}

调整后重启 Gateway:

bash
openclaw gateway restart

方案二:检查 stale-socket 重启日志频率

确认问题是否由 ping timeout 引起:

bash
openclaw logs --follow | grep -E "pong timeout|stale|restarting"

若每隔 5 秒出现一次 pong timeout,说明是阈值问题;若随机出现,可能是网络间歇性中断。

方案三:等待官方修复

社区 PR #68253 直接针对此问题提交了修复(增加 ping 超时 + 指数退避)。关注合并进度:

bash
# 临时验证当前版本是否已含修复
openclaw --version

2026.4.1 之前版本不受此问题影响,若急需稳定可回退。

常见问题

Q: 为什么 Slack 渠道反复重启但其他渠道(如 Telegram)正常?

A: Slack socket-mode 使用 WebSocket 长连接并依赖定期 ping/pong 心跳,对网络延迟更敏感。Telegram 使用 HTTP 轮询,不依赖 pong 响应。

Q: 配置 pingTimeoutMs 后重启次数减少了,但偶尔仍出现一次,正常吗?

A: 正常。网络质量下降时偶发一次重启属于预期行为,只要不出现连续循环重启(每分钟多次)即可认为已缓解。

Q: Windows Server 环境比 Linux 更容易触发是为什么?

A: Windows Server 的 TCP 栈默认 ACK 延迟策略与 Linux 不同,加上 Node.js 在 Windows 上的事件循环精度稍低,整体 pong 响应时间会比 Linux 长约 20-50ms,更容易踩到 5000ms 阈值边缘。