[中等] 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 行: 传递给
Response的ReadableStream定义了start(),其中包含两个setInterval定时器(每 15 秒心跳一次,每 5 秒推送一次实体),但没有cancel()— 这是流运行时在客户端断开连接或读取器被取消时调用的标准钩子。定时器只有在其自身的catch块中被反应性地清除时才会被清除,即在未来的controller.enqueue()发生抛出时。
内容来源: simplifaisoul/osiris