#355·osiris

[中等] SDK 在断开连接时会泄露 SSE 流定时器,并在 500 处默默截断实体数据流

作者: jsawyerdev创建于 2026年9月13日更新于 2026年9月15日
标签Triage

证据和机制

  • src/app/api/sdk/stream/route.ts:66: Array.from(globalForSDK.sdkEntityStore.values()).slice(0, 500) — 任何超过第 500 个实体(按 Map 插入顺序,而不是优先级)的实体都会在每次推送中被默默丢弃。
  • 第 29-80 行: 传递给 ResponseReadableStream 定义了 start(),其中包含两个 setInterval 定时器(每 15 秒心跳一次,每 5 秒推送一次实体),但没有 cancel() — 这是流运行时在客户端断开连接或读取器被取消时调用的标准钩子。定时器只有在其自身的 catch 块中被反应性地清除时才会被清除,即在未来的 controller.enqueue() 发生抛出时。

内容来源: simplifaisoul/osiris