SSE技术详解及应用场景

text/event-streamServer-Sent Events (SSE) 的 MIME 类型。这是一种基于 HTTP 的服务器向客户端推送实时数据的技术。

主要特点:

1. 单向通信

  • 服务器 → 客户端单向推送
  • 客户端使用 EventSource API 接收数据
  • 不同于 WebSocket 的双向通信

2. 工作原理

java 复制代码
// 服务器端(Spring Boot示例)
@PostMapping(value = "/question/answer/stream", 
             produces = "text/event-stream;charset=UTF-8")
public Flux<String> streamAnswer() {
    return Flux.interval(Duration.ofSeconds(1))
               .map(seq -> "data: 消息 " + seq + "\n\n");
}
javascript 复制代码
// 客户端(JavaScript)
const eventSource = new EventSource('/question/answer/stream');

eventSource.onmessage = (event) => {
    console.log('收到数据:', event.data);
};

eventSource.onerror = (error) => {
    console.error('连接错误:', error);
};

3. 数据格式规范

复制代码
data: 第一行数据\n
data: 第二行数据\n
\n
(空行表示一个消息结束)

data: 这是一条完整消息\n
\n

event: customEvent\n
data: 自定义事件数据\n
\n

4. 优势

  • 自动重连:连接中断会自动尝试重连
  • 简单易用:基于普通 HTTP,无需特殊协议
  • 轻量级:适合单向数据推送场景
  • 支持跨域:可以通过 CORS 配置

5. 典型应用场景

java 复制代码
// AI问答流式响应示例
@PostMapping(value = "/question/answer/stream", 
             produces = "text/event-stream;charset=UTF-8")
public Flux<String> streamAnswer(@RequestBody QuestionRequest request) {
    return aiService.generateStreamAnswer(request.getQuestion())
        .map(chunk -> "data: " + chunk + "\n\n");
}

// 返回的数据流会是:
// data: 这是\n
// data: 一段\n
// data: 流式\n
// data: 回答\n
// \n

6. 与 WebSocket 比较

特性 SSE WebSocket
协议 HTTP WS/WSS
方向 单向(服务器推) 双向
重连 自动 需手动实现
二进制数据 仅文本 支持二进制
复杂度 较高

7. 注意事项

  • 保持连接:需要服务器保持连接打开
  • 超时设置:可能需要调整服务器超时配置
  • 字符集:charset=UTF-8 确保中文正常显示
  • 浏览器兼容性:主流浏览器都支持(IE除外)

在 AI 问答场景中,SSE 非常适合用于实时流式返回生成的文本,让用户能够逐字看到答案生成过程,提升体验。

相关推荐
鲸采云SRM采购管理系统18 分钟前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
0x531 小时前
Java网络编程(二)
java·服务器·网络
Flittly2 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai2 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间2 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
树码小子2 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
茶本无香2 小时前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell
风流 少年2 小时前
Spring AI 2.0:MCP
java·后端·spring
天疆说3 小时前
01 硬件选型与 llama.cpp 部署:4× RTX 5880 Ada 跑 DeepSeek-V4-Flash
java·redis·llama