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

相关推荐
开发者小天20 小时前
python中For Loop的用法
java·服务器·python
flushmeteor20 小时前
JDK源码-基础类-String
java·开发语言
毕设源码-钟学长20 小时前
【开题答辩全过程】以 基于ssm的空中停车场管理系统为例,包含答辩的问题和答案
java
不愿是过客20 小时前
java实战干货——长方法深递归
java
小北方城市网21 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
六义义1 天前
java基础十二
java·数据结构·算法
毕设源码-钟学长1 天前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
笨手笨脚の1 天前
深入理解 Java 虚拟机-03 垃圾收集
java·jvm·垃圾回收·标记清除·标记复制·标记整理
莫问前路漫漫1 天前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
九皇叔叔1 天前
【03】SpringBoot3 MybatisPlus BaseMapper 源码分析
java·开发语言·mybatis·mybatis plus