Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

fix(http): SSE 无 Last-Event-ID/重放——lagged 静默丢弃 + 1h 硬超时强制重连,断线窗口事件永久丢失

未关闭
#97 9 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
rust
领域
api, backend

调研方向

Read src/http/handlers.rs around lines 1155, 1301, 1308-1328, and 1338 to trace the per-session broadcast channel, lag handling, and one-hour timeout. Check how SSE requests are parsed and how GET /sessions/:id is exposed before defining the event sequence and bounded replay behavior. Done means SSE events have monotonic IDs, reconnects honor Last-Event-ID, and the since endpoint can replay missed events.

由索引模型根据 Issue 内容生成。

描述

场景 gap 单(okguitar 提报)· 优先级 P1 · 依赖:depends-on: #117(未终态时 keeper 自动 hold)

基线 HEAD = 9165b9a0。

Summary

  • 每会话 broadcast::channel(64)(src/http/handlers.rs:1155,1301);消费慢于 64 条时 BroadcastStream 的 Lagged 错误被 Err(_) => None 静默丢弃(handlers.rs:1308-1328)——不报错、不重放,直接缺段。
  • 全程无 Last-Event-ID 读取、无事件序号/重放缓冲;连接有 1h 硬超时强制重连(handlers.rs:1338),重连即从订阅时刻开始。
  • C 端弱网/移动端网络切换/代理超时重连是常态:断连窗口内的 PartialMessage/ToolCall/ToolResult/Done 全部丢失,客户端流式状态机无法恢复;最终兜底只有 GET /sessions/:id 的 committed 消息(partial 与工具进度无补偿)。

建议

每会话保留有界事件环形缓冲 + 单调 seq,SSE 事件带 id,支持 Last-Event-ID 头与 GET /sessions/:id/events?since=<seq> 重放。

主要语言
Rust
星标
4
派生
0
平均合并
5 小时 32 分钟
30 天内合并 PR
7

环境准备

  • 提供 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 没有贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

jeffkit/recursive 的其他 Issue

查看 jeffkit/recursive 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。