SSE、WebSocket、普通 HTTP 与长短轮询有什么区别?
未标记
考查重点:通信方向、连接与恢复语义。普通响应一次,轮询重复等更新,SSE 单向流,WebSocket 双向,按控制恢复需求选
本题目录
参考答案
核心回答
长短轮询与 SSE 都基于 HTTP;它们与普通请求的区别在于等待和返回更新的方式。WebSocket 则提供持续的双向消息通道。
- 普通
HTTP请求/响应:客户端发起一次请求,服务器返回本次结果,适合查询、提交和上传等交互。响应结束不代表底层连接一定关闭,后续请求可以复用连接。 - 短轮询:客户端按间隔重复请求。有无更新都及时返回,实现简单,但会有空请求,发现更新的延迟受轮询间隔影响。
- 长轮询:没有新数据时,服务器暂时挂起请求;有数据或超时后返回,客户端再发起下一次请求。能减少空响应,但仍有请求续接和超时管理成本。
SSE:客户端发起HTTP请求,服务器在同一个响应中持续发送UTF-8事件流,适合进度、通知和模型文本输出。事件流里的业务数据从服务器发向客户端;原生EventSource提供事件解析和自动重连等能力。WebSocket:握手后,双方可以在同一消息通道中主动发送文本或二进制消息,适合聊天、协作和高频交互。需要管理连接、心跳、重连以及应用消息恢复。
选型先看是否需要持续更新、是否需要双向主动发消息:偶尔查状态可用普通请求或短轮询;希望及时收到更新且沿用请求/响应可用长轮询;主要由服务端持续推送可用 SSE;持续双向交互再考虑 WebSocket。
流式响应和双向交互怎样区分?
例如用户提交一个问数问题,后端持续返回处理进度和查询结果,主要数据流是服务端到客户端,SSE 就能满足需求。用户取消任务或提交下一条问题,可以另发 HTTP 请求,不必因为页面也有输入操作就选择 WebSocket。
如果双方都要频繁主动发消息,例如协作文档持续同步操作和状态,WebSocket 的同一消息通道更合适。但选用了 WebSocket,也可以继续用普通 HTTP 上传文件或提交任务,不必把所有接口都塞进这个通道。
普通 HTTP 也可以持续传输响应体;SSE 在流式响应上约定了事件格式,如 data、event、id 字段和事件边界,并不等同于所有流式 HTTP。SSE 保持 HTTP 响应语义;经典 HTTP/1.1 WebSocket 握手通过协议升级建立消息通道,后续按 WebSocket 消息帧通信。
长轮询则通常在收到一批数据后结束本次响应,再发新请求;SSE 可以在一次持续的响应里接收多条事件,因此更新频繁时可减少重复请求和响应头的开销。
自动重连是否意味着不会丢消息?
重连和补齐消息是两件事。 原生 EventSource 在可恢复的断线后会重连;服务端发送的 id 可以让客户端记录事件位置,重连时通过 Last-Event-ID 告知服务端,retry 可以调整重连等待时间。
但协议不会替服务端保存历史消息。要接着上次的位置恢复,服务端还需要保留可重放事件、按 ID 补发,客户端处理可能重复的事件;超出保留范围时,可重新拉取快照。任务正常结束后,也应按业务结束事件关闭客户端事件源,避免再次重连。
有些接口通过 POST 返回 SSE 格式的流,例如问数项目的查询接口。这时需要相应的流式客户端,不能把原生 EventSource 的解析、重连和事件 ID 处理直接当成所有流式客户端都有的功能。
WebSocket 在连接正常时提供有序的消息传输,但断线、进程重启和业务处理失败仍会留下恢复问题。浏览器原生 WebSocket API 不自动提供重连和历史消息补发;需要时应设计退避重连、消息 ID、业务确认、补发和幂等。Ping/Pong 或心跳主要帮助判断连接活性,不等于业务消息已经处理成功。
连接和代理方面有什么成本?
短轮询容易部署,但间隔过短会放大空请求;长轮询需要维持挂起请求并处理续接。SSE 和 WebSocket 都需要长期维护活跃通道,关注连接或流数量、内存、空闲超时和慢客户端积压,服务端不能为慢连接无限缓存消息。
SSE 使用 HTTP,也要检查反向代理是否缓冲响应、事件能否及时刷新、空闲连接是否被关闭。WebSocket 则要确认代理支持相应握手和转发,并在多实例部署时安排消息路由;重连后可能进入其他实例,恢复状态不能只靠原连接内存。
这些成本不能简单换算成“一个请求就新建一条 TCP”或“SSE 永远只有固定连接数”。HTTP/1.1 可以复用连接,HTTP/2 可以在同一连接上承载多个流;实际限制还取决于浏览器、HTTP 版本和网关配置。
对应教程
- 电商问数:API 接口基础与 FastAPI 入门 §5,以及查询接口实现与依赖组装:回看一次提交问题、持续返回进度和结果的 SSE 场景,以及 POST 查询接口怎样返回事件流。
- 深度研搜:FastAPI 接口与项目闭环 §1:回看 HTTP 提交、取消、文件接口与 WebSocket 进度通道如何配合,区分协议能力与项目实际用法。
参考资料
- 国内:JavaGuide:计算机网络常见面试题总结(上):长短轮询、WebSocket 和 SSE 对比部分说明更新如何到达客户端,以及单向推送与双向消息的区别。
- 国内:JavaGuide:常见应用层协议总结:参考 HTTP 请求响应、连接复用和 HTTP/2 多路复用的说明,区分正文中业务请求结束与底层连接生命周期。
- 国内:小白 debug/小林 coding:HTTP 和 WebSocket 有什么区别?:扫码登录与等待更新的例子说明短轮询、长轮询和 WebSocket 的交互过程,以及长轮询为何需要不断续接请求。
- 国内:阮一峰:WebSocket 教程:依据协议特性和浏览器事件的说明,解释正文中 WebSocket 的双向主动发送、文本与二进制消息及连接生命周期。
- 国外:WHATWG:Server-sent events:
EventSource、事件字段和Last-Event-ID的标准约定,说明自动重连、事件位置与服务端补发之间的边界。 - 国外:IETF:RFC 6455 — The WebSocket Protocol:握手、数据帧、Ping/Pong 和异常断开部分说明 WebSocket 的通信能力、连接探活及退避重连的依据。
- 国外:MDN:Using server-sent events:事件接收、服务端刷新和连接限制部分说明 SSE 如何落地,以及代理缓冲、HTTP 版本为何影响实际行为。
相关面经
56 篇米哈游
NPC Agent 开发客户端和服务器之间,这段流式用什么协议?
阿里巴巴
后端开发 / Agent 开发SSE 和普通 HTTP 返回有什么区别?
启云方
AI 应用开发工程师SSE 和 WebSocket 的区别?
水滴
AI全栈SSE 和 WebSocket 有什么区别?
百度
前端开发工程师展开剩余 51 篇面经
字节跳动
后端开发实习生项目中使用的 SSE 协议,与 WebSocket 有什么区别?
公司未注明
测试开发岗SSE流式响应底层原理,和websocket的差异,测试SSE接口你会怎么设计用例。
美团
全栈开发实习生前后端实时通信怎么做的?为什么用 WebSocket?
CVTE
后端开发工程师为什么用SSE流式解析,不用websocket,两者有什么区别?
科大讯飞、首都在线、宇量晟、四川长虹、度小满、字节跳动、恒生电子、腾娱互动、金蝶、汽车之家
面试官人很好,不刁难,卡顿时也会及时引导,上来先拷打项目,每次面字节都会给我一种面试官想深究的感觉,他会一直朝一个方向问,直到你答不上来。之后就是八股,上来问agent相关rag,上下文工程,这块八股我非常薄弱,周旋了几轮后,面试官看出来我agent这块一般开始问服务端(此时我就能感觉出来我挂了),后面问服务端的八股,sse和websocket,线程池,缓存,mysql的一些基础八股(已经能够感觉到水时间了)。算法题:岛屿数量。dfs秒了。最后反问:全栈来说,agent所有东西也要吃透掌握吗。面试官说ai时代这是一个开发er具备的基本素质了,企业都希望招一个前端后端agent都能干的开发。
美团
AI 后端请介绍一下 SSE 协议,以及它与普通 HTTP 请求的区别。
字节跳动
AI 全栈开发工程师还有什么其他方案能实现轮播功能?
字节跳动
前端开发工程师SSE和webSocket的协议特性,重连方式以及使用场景
科沃斯
助理开发工程实习生(AI 助手项目)SSE 流式响应和websocket的区别
百度
实现私聊还有其他方案,为什么选 WebSocket?
度小满
后端开发SSE 和 WebSocket 有什么区别?(八股)
云南汇诺
客户端开发sse和websocket有什么区别
CVTE
应用软件开发字节跳动
前端开发(Agent 方向)SSE和WebSocket有什么区别
腾讯
了解SSE吗?
字节跳动
客户端开发流式返回在协议层用的是 HTTP 还是其他协议?
招银网络科技
后端开发SSE 和 WebSocket 有什么区别?
回响科技
AI全栈SSE和Websocket如何选,有什么区别,哪个更安全,兼容性更好
小红书
PE 社区工程http, SSE, WebSocket 比较. 你在项目中怎么使用的. 举出各自试用的场景.
要务科技
AI 应用开发工程师WebSocket和SSE的区别?
百度
Agent 应用开发工程师公司未注明
流式输出怎么做,SSE和WebSocket选哪个
知乎
全栈开发工程师百度
后端开发工程师WebSocket与SSE两种通信协议,各自适用场景及选型依据是什么?
字节跳动
Agent 开发工程师了解SSE与WebSocket吗?展开介绍
字节跳动
前端SSE协议和WebSocket协议有什么区别?
久尺科技
全栈开发工程师腾讯
前端sse 对比 websocket
字节跳动
后端开发工程师(AI / Agent 方向)为什么不用 WebSocket?SSE 和 WebSocket 底层有什么区别?
百度
AI Agent 前端研发实习生为什么要用SSE做ai输出,不用websocket?
字节跳动、腾讯、快手、哔哩哔哩、滴滴、美团
快手、金山云、蔚蓝云创、深势科技、滴滴
字节跳动
前端开发SSE和WebSocket的本质区别是啥?
字节跳动
Agent实时搜索通常使用什么网络协议(如 WebSocket)?你了解或有使用过吗?讲一下
阿里巴巴
游戏服务端开发websocket
腾讯音乐
后端开发工程师你能够解释一下 SSE 和我们更常见的 WebSocket 的主要区别吗?为什么会在你的 Agent 项目场景下选择 SSE?
腾讯
sse的原理,如果不用sse还有什么方法能立即推送
阿里巴巴
终端开发介绍SSE和WebSocket,为什么选择SSE?
飞牛、网易、米连、迅雷、LiblibAI、百度、阿里巴巴、趣丸、小满科技、京东、腾讯、滴滴、BIGO
websocket 和 sse 的区别
阿里巴巴
AI 研发工程师SSE和WebSocket的区别?
阿里国际
AI 应用开发SSE和websocket的区别
腾讯
前端开发工程师SSE,长短轮询,websocket的区别
阿里巴巴
AI 应用研发SSE和websocket的区别
字节跳动
前端第一个项目为什么用sse而不用websocket
美团
影刀
AI 前端开发sse和socket的区别,为什么用sse做流式而不是socket
字节跳动
后端开发实习生Websocket和SSE
字节跳动
后端SSE和普通的HTTP的区别是什么?
百度
后端开发流式传输的实现方式有哪些(websocket,sse,streamablehttp)
阿里云
AI 应用前端开发请简述SSE(Server-SentEvents)与WebSocket的区别,以及在AI对话场景下为什么通常选择SSE?
字节跳动
后端开发(Agent 方向)实时搜索通常使用什么网络协议(如WebSocket)?你了解或有使用过吗?讲一下















