You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Server-Sent Event单个事件的结束?应对数据含空行情况

Server-Sent Event(SSE)事件结束的正确判断规则

首先要明确:SSE的事件结束标识不是单个空行,而是两个连续的换行符(\n\n)——这是W3C规范明确规定的事件分隔逻辑。

当data字段包含空行时的处理逻辑

  • 服务端侧:
    如果要发送的data内容包含换行(包括空行),需要把内容按换行拆分,每一行都加上data:前缀后发送。比如原始data是:
    Hello
    
    World
    
    服务端需要输出的格式为:
    data:Hello
    data:
    data:World
    
  • 客户端侧:
    接收时,要把同属一个事件的所有data:开头的行收集起来,去掉每行的data:前缀(若data:后直接换行,对应原始内容里的空行),再将这些行拼接,就能还原出带换行的原始data内容。只有当遇到连续两个换行符时,才判定当前事件结束。

结合你的示例修正理解

你之前看到的单个事件后的空行,其实是\n\n中第二个换行的显示效果。真正的事件分隔是连续两个换行,data内部的换行只会被解析为内容的一部分,不会触发事件结束。

比如服务端发送带空行的data事件:

String multiLineData = "Hello\n\nWorld";
emitter.send(SseEmitter.event().id("id").name("eventMultiLine").data(multiLineData));

按照SSE规范,服务端会自动将其转换为:

id:id
event:eventMultiLine
data:Hello
data:
data:World

并以\n\n结尾。客户端接收时,会把这三行data:开头的内容拼接,还原出Hello\n\nWorld的原始数据,直到遇到\n\n才判定该事件结束。

内容的提问来源于stack exchange,提问作者KijeviGombooc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:40:26