一、先大白话讲懂:SSE、WebSocket、HTTP
1. SSE (Server-Sent Events 服务端推送)
- 底层协议 :依然是 HTTP/HTTPS
- 单向:只能 服务端 → 客户端 推数据
- 场景:大模型打字机流式输出、消息通知、实时日志、大屏实时数据
- 特点:
- 一次 HTTP 连接建立,长连接,服务端持续发片段数据
- 浏览器原生支持,不用额外协议
- 自动断线重连
- 只能服务端发,客户端不能实时发消息
2. WebSocket
- 底层协议 :独立 WS / WSS 协议(不是HTTP)
- 双向:客户端 ↔ 服务端 双向实时通信
- 场景:聊天室、实时对战、协同编辑、高频双向互动AI对话
- 特点:
- 握手阶段借用HTTP,升级后完全脱离HTTP
- 真正全双工,两边随时发消息
- 开销极小,适合高频交互
- 需要自己处理重连、心跳、断连
3. 普通 HTTP
- 一问一答:客户端发请求 → 服务端一次性返回结果 → 连接断开
- 短连接,无状态
- 大模型普通问答、接口CRUD全是这个
二、核心区别(面试必背)
| 对比维度 | SSE | WebSocket | 普通HTTP |
|---|---|---|---|
| 协议 | 基于HTTP | 独立WS协议 | HTTP |
| 通信方向 | 单向(服务端推) | 全双工双向 | 单向一问一答 |
| 连接类型 | 长连接 | 长连接 | 短连接 |
| 适用场景 | AI流式输出、公告、日志 | 聊天、实时互动、协同 | 常规业务接口 |
| 浏览器支持 | 原生支持 | 原生支持 | 全部支持 |
| 开发成本 | 低 | 偏高(心跳、断连) | 最低 |
| 网络穿透 | 友好,走80/443 | 部分防火墙拦截WS端口 | 最友好 |
关键一句话区分
- 只需要服务端源源不断吐内容(AI打字机) → 用 SSE
- 需要两边实时互发消息(聊天、互动) → 用 WebSocket
- 普通查改增删、一次性返回 → 用 HTTP
三、AI 场景对应(你面试要用)
- 大模型流式回答、RAG流式输出
✅ 行业主流:SSE
理由:
- 只需要后端一段一段发文字,前端展示打字机
- 开发简单、基于HTTP、运维友好、不用维护心跳
- AI多轮实时聊天、带实时打断、实时编辑
✅ 才会用:WebSocket
四、企业前后端交互 主流选型(工作真实情况)
1. 90% 常规业务接口
HTTP + JSON
- 所有CRUD、登录、订单、用户、权限、后台管理
- 同步接口,一次性返回
2. 需要服务端实时推送 / AI流式
SSE(首选)
- SpringBoot 原生支持、SpringAI / LangChain4j 流式默认适配SSE
3. 强双向实时场景
WebSocket
- IM聊天、客服系统、在线协作、实时大屏操控
4. 高并发消息队列异步
MQ(RabbitMQ/RocketMQ/Kafka)
- 解耦、削峰、异步任务,不属于前端交互
五、面试标准背诵版(直接背)
-
SSE
基于HTTP的服务端单向长推送技术,长连接,服务端可持续向客户端推送数据流,适合大模型流式输出、系统通知等单向实时场景,开发简单、兼容性好。
-
WebSocket
是独立的全双工通信协议,握手后脱离HTTP,客户端与服务端可互相主动发消息,适合聊天、实时协同、高频双向交互场景。
-
核心区别
SSE 基于HTTP、单向推送、轻量化;WebSocket 是独立协议、双向全双工、适合强实时互动。
-
日常选型
常规业务使用HTTP ;AI流式问答采用SSE ;双向实时聊天采用WebSocket。
六、补充:SpringBoot 对应技术
- SSE:
SseEmitter - WebSocket:
@ServerEndpoint/ Spring WebSocket - AI流式:SpringAI、LangChain4j 都封装好了 SSE 流式返回,直接开箱即用。