方法论与洞察

「重启才好」是缓存了时效凭证的指纹

首次记录:2026-08-02 来源:LiveLink 断线重连 —— 用户描述「点停止再点开始也没用,只能重启软件」, 这句话本身就指向了根因 状态:⚠️ 首次


一句话

用户说「只能重启才好」时,优先怀疑:进程内缓存了某个带时效的凭证, 而且那份缓存没有失效路径


为什么这句话是指纹

把三种「重来」摆在一起看,它们的区别正好把嫌疑范围压到很小:

重来的层级会重置什么不会重置什么
重连 / 重试网络连接进程内存
停止 → 重新开始业务对象、连接进程级 / 模块级缓存
重启进程全部磁盘上的东西

所以:重连不好、停止再开始也不好、唯独重启好 ⇒ 坏掉的东西活在 「比业务对象更长命、但比进程更短命」的那一层 —— 典型就是模块级缓存

再叠加「一开始能用、用着用着就不行了」这个时间特征 ⇒ 缓存的是带时效的东西: token / session / 签名 / 预签名 URL。


第三方库把弹幕服务器的握手 token 存在模块级 Map 里,永不失效、无对外清除入口。 token 过期后,无论重连多少次、还是「停止→重新开始」重建对象, 拿到的都是同一份失效 token —— 只有重启进程才会重新去取。

实测证据:同一房间连续两次 startListen,打印出的 token 完全相同


操作规则

  1. 听到「只能重启才好」→ 先去找模块级 / 全局单例上的缓存,而不是先读业务逻辑。
  2. 确认缓存里存的东西有没有时效。有时效 + 无失效路径 = 根因。
  3. 修的时候,失效判断不要用时间(猜不准过期点),要用权威信号 —— 凭证被服务端拒绝的那一刻,就是显式作废的时机。
  4. 但也别走向另一个极端「每次都回源」:LiveLink 实测发现未登录状态下高频取 token 会被平台风控(-352)。最终采用「短 TTL 复用 + 失败时显式作废」双轨
  5. 排查时优先构造能直接打印缓存内容的最小脚本(本次就是连两次、比对 token), 比读代码推断可靠得多。

反例 / 边界


关联文档

类型/协作工具链