1. SSE 的 event、data、id、retry 和空行边界如何解析,网络分块为何不等于事件边界
SSE 的 event、data、id、retry 字段和空行边界应如何解析?为什么网络分块(chunk)不等于事件边界?
- SSE 协议格式(event/data/id/retry)
- 空行作为事件分隔符
- 网络分块与事件边界的区别
SSE 事件由多行组成,以空行分隔:event: 指定事件类型,data: 追加数据(可多条,按换行拼接),id: 提供事件 ID 用于断线重连,retry: 设置重连间隔。解析器按"空行"作为一个事件结束的边界,而非按网络包(chunk)边界。网络分块(HTTP chunked)只是传输层的分帧,一个 SSE 事件可能被拆成多个 chunk,也可能多个事件在同一 chunk 里,因此解析器必须做"累积缓冲 + 按空行切分":把收到的字节追加到缓冲区,完整地按空行切出事件,再交给事件解析。不能把一次 read 或一个 chunk 当作一个事件。
SSE 是"应用层事件流",网络分块是"传输层分帧",两者边界不同。解析器必须缓冲并按空行(事件分隔符)切分,才能正确处理跨 chunk 的事件。