进度指针(resume cursor) 协议

别名: 进度指针 · lastSeq

客户端记录的「最后一条完整收到的事件序号」,是断点续传的指针。`POST /chat` 返回的 `lastSeq` 让客户端只订阅本轮新事件;`GET /events?since=N` 里的 `N` 就是这个指针。缺省 `since=0` 等于全量回放,向后兼容旧客户端。

它是什么

进度指针(resume cursor)是客户端记录的「最后一条完整收到的事件序号」,断点续传就是围绕它转的:正常订阅期间每收到一条事件就把 lastSeq 推进一格;断线后带着 N 回来,服务端 getSince 只补发 seq > N 的增量。

协议位置

指针出现在协议的两个位置:POST /chat 返回的 lastSeq 让客户端只订阅本轮新事件(「从这轮起点开始读」);GET /events?since=NN 是重连断点(「从上次断的地方续读」)。缺省 since=0 等于全量回放,向后兼容旧客户端——增量回放是 on top of 全量回放的,不是替换。

两个容易混的点

一是记录时机:只有「完整收到」才能推进指针——事件解析出来、reducer 处理完才算,收到半条就记录会在重连时丢事件。二是指针只是尽力精确的请求:多记一号漏一条、少记一号重一条,服务端允许重复投递,幂等消费是客户端责任。SSE 传输层的 Last-Event-ID 是同一思想的浏览器内置版,但绑死连接、只有 EventSource 能用,所以协议语义走应用层的 since

在本教程的位置

第 16 章createSeqAllocator 与事件存储的 getSince/lastSeq 把它落在代码上;ch10 的 eventId 是它在持久层的形态。相关词条:事件序号断线恢复

相关词条

出现在这些章节