SSE 流式接口讲解

SSE 流式接口

1. 一句话定义

SSE = Server-Sent Events,服务器主动向浏览器推送数据流的技术

  • 只用于:服务器 → 客户端 单向推送
  • 典型场景:AI 打字机效果、实时通知、日志滚动、直播弹幕
  • 你看到的豆包/DeepSeek/ChatGPT 回复,全都是 SSE

2. 核心特点(必须记住)

✅ 基于 HTTP ,不需要 WebSocket

✅ 服务器主动推流 ,前端自动接收

✅ 天然支持断线重连

✅ 非常适合文本流、AI 流式输出

❌ 只能服务器→客户端 ,不能双向

❌ 不适合超低延迟游戏(用 WS)


3. 前端怎么用?(代码直接复制)

前端接收 SSE 流(最简版)

javascript 复制代码
// 1. 创建 SSE 连接
const evtSource = new EventSource('/api/stream');

// 2. 接收消息(核心)
evtSource.onmessage = (e) => {
  const data = e.data; 
  console.log('收到流数据:', data);
  // AI 场景:直接把数据追加到页面 → 打字机效果
  document.body.innerHTML += data;
};

// 3. 错误处理
evtSource.onerror = (err) => {
  console.error('SSE 出错', err);
  evtSource.close(); // 关闭连接
};

// 4. 手动关闭
// evtSource.close()

4. 服务器返回格式(必须严格遵守!)

SSE 不是随便返回的,格式是固定协议:

复制代码
data: 你好\n\n
data: 我是\n\n
data: AI\n\n

规则:

  • 每一段必须以 data: 开头
  • 必须以 两个换行 \n\n 结束
  • 只能传字符串(JSON 要转字符串)

如果返回 JSON:

复制代码
data: {"content":"你好"}\n\n

5. 最常用场景:AI 流式输出(打字机效果)

前端代码(完整版)

javascript 复制代码
const sse = new EventSource('/api/ai-chat');
let result = '';

sse.onmessage = (e) => {
  try {
    const data = JSON.parse(e.data);
    result += data.content; // 追加文字
    renderToUI(result); // 实时渲染到页面
  } catch (err) {}
};

// 结束标识
sse.addEventListener('close', () => {
  sse.close();
});

服务器返回流示例

复制代码
data: {"content":"大"}

data: {"content":"家"}

data: {"content":"好"}

data: {"content":"!"}

data: "[DONE]"

6. SSE 关键请求头(面试/抓包必考)

你在浏览器看到的:

复制代码
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

这三个就是 SSE 标志。


7. SSE vs WebSocket(最简单对比)

特性 SSE WebSocket
方向 服务器 → 客户端 双向
协议 HTTP WS 独立协议
复杂度 极低 较高
断线重连 自动 手动
适用场景 AI流、通知、日志 聊天、游戏、实时协作

结论:AI 流式回答 → 永远选 SSE


8. 你之前的截图是什么?

就是 SSE 接口:

  • Content-Type: text/event-stream
  • 服务器不断推流
  • 前端一段一段接收 → 拼成最终回答

9. 超简总结(背会就能面试/开发)

  1. SSE = 服务器推流技术
  2. 用于 AI 打字机、实时日志
  3. 前端用 new EventSource(url) 接收
  4. 服务器返回 data: xxx\n\n 格式
  5. 只进不出,简单稳定
相关推荐
FRing0341 分钟前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
OpsEye2 小时前
怎么实现大模型的按用户、按应用配额限流?
javascript·ai编程
云舜言传3 小时前
Bloom 手势演示操作 · 录屏指南
javascript·深度学习·机器学习
Highcharts.js6 小时前
BI可视化图表“维护难”问题的解决方案
开发语言·前端·javascript·编辑器·ecmascript·bi·highcharts
倚窗听花_6 小时前
IIS部署前端Vue项目
前端·javascript·vue.js
yixun_gdas6 小时前
政企网站错敏巡查:错敏都藏在哪些位置?
开发语言·前端·javascript·内容运营
小羊没烦恼!7 小时前
.NET 11 Runtime Async 详解
java·运维·开发语言·javascript·python
飞飞鱼在摸鱼7 小时前
前端转Agent开发 | JavaScript 从 0 到 1 完全指南
前端·javascript
Suprman8 小时前
从 B/S 到 Electron:平面排版套料系统桌面版开发实战
javascript·平面·electron·排序算法
u0111026758 小时前
Vue 3 统一右侧编辑面板:布局、滚动与底部操作区设计
javascript·vue.js·ecmascript