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 非常适合用于实时流式返回生成的文本,让用户能够逐字看到答案生成过程,提升体验。

相关推荐
2501_941982053 小时前
RPA 赋能企业微信外部群:多群同步操作的技术实现
java·开发语言
Seven973 小时前
剑指offer-49、把字符串转换成整数
java
编程修仙3 小时前
第六篇 HttpServletRequest对象
java·spring boot·后端
杀死那个蝈坦3 小时前
微服务网关(Spring Cloud Gateway)实战攻略
java·微服务·架构
凌云若寒3 小时前
半导体标签打印的核心痛点分析
java
灰乌鸦乌卡3 小时前
泛微OA集成档案信息包生成
java
2301_803554523 小时前
利用信号完成这个联动需求
java·开发语言
500843 小时前
鸿蒙 Flutter 超级终端适配:多设备流转与状态无缝迁移
java·人工智能·flutter·华为·性能优化·wpf
codealy3 小时前
Spring 事务失效的八大场景深度解析
java·spring boot·后端·spring