news 2026/1/14 12:04:03

sse和websocket的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sse和websocket的区别

SSE(Server-Sent Events,服务器发送事件)和WebSocket都是实现「服务器主动向客户端推送数据」的技术,但核心设计、通信模式、适用场景差异显著。面试回答时,建议先总述核心区别,再从通信特性、协议基础、使用成本、场景适配四个维度拆解,最后结合实际场景给出选型逻辑,既体现原理理解,又落地项目实践。

一、核心总述

SSE是基于HTTP的单向推送协议,仅支持服务器→客户端的单方向数据传输,主打“简单、低成本、内置重连”;WebSocket是独立的全双工通信协议,支持客户端↔服务器双向实时通信,主打“低延迟、高灵活、双向交互”。两者的核心差异源于协议设计目标:SSE聚焦“极简的单向推送”,WebSocket聚焦“全场景的双向实时交互”。

二、关键维度对比(面试核心)

维度SSE(Server-Sent Events)WebSocket
通信方向单向(服务器→客户端)
客户端仅能通过HTTP请求(如POST)被动回传数据,无法主动推
全双工(双向)
连接建立后,双方可随时互发数据,无需额外请求
协议基础基于HTTP/1.1,复用HTTP协议栈(端口80/443)
响应头固定:Content-Type: text/event-stream,本质是“长连接的HTTP响应流”
独立应用层协议(RFC6455)
先通过HTTP“握手”(发送Upgrade: websocket请求)升级连接,之后脱离HTTP,用自定义帧格式传输
连接特性1. 浏览器内置自动重连(通过retry字段控制重连间隔,断开后自动重试)
2. 连接轻量,无需手动维护心跳(服务器发空注释帧:保活即可)
1. 无内置重连,需手动实现(监听onclose事件,自行写重连逻辑)
2. 需手动维护心跳(ping/pong帧),否则易被网关断开连接
数据格式/传输仅支持UTF-8文本格式
服务器按固定格式(event/data/id/retry字段)发送事件流,浏览器自动解析为EventSource事件(支持事件分类)
支持文本(UTF-8)+二进制数据(如图片、视频流)
数据帧无HTTP头开销,传输效率更高,可自定义格式(JSON/Protobuf等)
兼容性/使用成本1. 兼容性:IE不支持,其余现代浏览器全支持
2. 成本极低:
客户端:new EventSource('/sse')几行代码搞定
服务器:仅需按格式输出文本流
1. 兼容性:IE10+支持,覆盖更广
2. 成本较高:
客户端:需处理握手、重连、帧解析
服务器:需实现WebSocket协议(如Netty/Spring WebSocket),且需配置网关允许Upgrade请求
网关/代理适配完全兼容HTTP网关/CDN(无需额外配置),因为本质是HTTP请求部分老旧网关/代理会拦截Upgrade握手请求,需额外配置(如Nginx开启proxy_set_header Upgrade $http_upgrade;

三、核心原理拆解(补充深度)

1. SSE的底层工作逻辑

SSE的核心是“HTTP长连接的响应流”:

  • 客户端发起GET请求,服务器返回200 OK并设置text/event-stream响应头,且不关闭连接;
  • 服务器持续向客户端推送格式化文本(如data: 订单状态更新为已发货\n\n),每段数据以\n\n结尾,浏览器的EventSource会自动解析并触发onmessage事件;
  • 连接断开后,浏览器根据retry字段(默认3秒)自动重新发起请求,无需前端写重连代码。
2. WebSocket的底层工作逻辑

WebSocket分“握手+通信”两步:

  • 握手阶段:客户端发送HTTP请求,携带Upgrade: websocketSec-WebSocket-Key等头,服务器验证后返回101 Switching Protocols,连接升级为WebSocket;
  • 通信阶段:双方通过“帧(Frame)”传输数据(如文本帧、二进制帧、ping/pong帧),帧头仅2-10字节,远轻于HTTP头,且支持分片传输大数据。

四、适用场景(结合项目落地,面试加分)

1. 优先选SSE的场景(单向推送)
  • 实时通知:订单状态更新、系统告警、消息提醒(如你仿Coze项目中MCP工具调用的状态推送:“工具执行中/成功/失败”);
  • 数据监控:后台仪表盘实时数据(如CPU使用率、接口QPS)、日志流推送;
  • 极简需求:无需客户端回传数据,追求“零配置、低开发成本”。
2. 优先选WebSocket的场景(双向交互)
  • 即时通信:在线聊天(如Coze的实时对话)、弹幕、客服对话;
  • 实时协作:多人在线编辑文档、在线游戏(需客户端频繁发操作指令,服务器实时回传结果);
  • 高频双向交互:金融行情(客户端订阅/取消订阅,服务器推实时行情)、物联网设备控制(客户端发指令,服务器推设备状态)。

五、面试总结(精简版)

SSE和WebSocket的核心区别是“单向极简” vs “双向灵活”:

  • SSE基于HTTP,单向推送、内置重连、成本极低,适合仅需服务器推数据的场景(如通知、监控);
  • WebSocket是独立协议,全双工、低延迟、支持二进制,适合需要双向实时交互的场景(如聊天、游戏)。

在我仿Coze的项目中,MCP工具调用的状态推送用了SSE(仅需服务器推执行状态,无需客户端回传),而实时对话模块若要优化体验,会考虑WebSocket(用户发消息、AI实时回,双向交互更高效)。这种选型的核心是“匹配场景需求,避免过度设计”——SSE能满足的单向推送需求,无需用复杂的WebSocket。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 15:38:45

python之知识图谱(networkx)

NetworkX 库介绍与使用指南 NetworkX 是 Python 中用于创建、操作和分析复杂网络(图结构) 的核心库,支持无向图、有向图、加权图、多重图等多种图类型,内置丰富的图算法(路径分析、连通性、中心性、社区检测等&#xf…

作者头像 李华
网站建设 2025/12/20 10:00:46

【技术教程】2025年Python GUI框架选型终极指南

2025年Python GUI框架选型终极指南(最新版) 以下内容基于2024-2025年真实社区动态与企业实践整理,已反映当前最准确的格局与趋势。 一、2025年Python GUI框架最新格局总览框架当前地位主要变化与趋势(2025)GitHub星标&…

作者头像 李华
网站建设 2026/1/13 11:53:46

AI代码生成终极指南:OpenReasoning-Nemotron-14B快速上手教程

AI代码生成终极指南:OpenReasoning-Nemotron-14B快速上手教程 【免费下载链接】OpenReasoning-Nemotron-14B 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/OpenReasoning-Nemotron-14B 在当今软件开发领域,AI代码生成技术正在彻底改变传…

作者头像 李华
网站建设 2025/12/11 21:02:47

在电机控制领域,永磁同步电机(PMSM)的无位置传感器控制一直是一个热门话题。今天,我们就来聊聊如何在工程中实现这一技术,特别是低速和高速度下的控制策略

永磁同步电机无位置传感器算法仿真,低速IF中高速龙贝格观测器,这是工程中最常用最成熟的方法。 低速采用流频比IF控制,转速开环,电流闭环,转速和位置角度使用参考转速和计算的参考位置。 中高速采用了基于龙贝格观测器…

作者头像 李华
网站建设 2025/12/21 14:12:41

在家也能组乐队?ACE-Step 加上cpolar远程做歌超顺手

文章目录前言1、关于ACE-Step2、windows本地部署3、简单使用ACE-Step4、介绍以及安装cpolar5、配置公网地址6、配置固定二级子域名公网地址结尾前言 ACE-Step 主要功能是基于 AI 算法生成原创歌曲,支持中文、英文等 19 种语言,输入关键词或歌词就能生成…

作者头像 李华
网站建设 2025/12/27 20:58:13

揭秘Dify Agent工具注册黑盒:3个关键接口与注册流程全拆解

第一章:揭秘Dify Agent工具注册机制的核心价值Dify Agent作为连接AI模型与业务系统的桥梁,其注册机制在系统可扩展性与安全性方面扮演着关键角色。该机制不仅确保了每个Agent的身份唯一性,还通过标准化的接入流程实现了动态发现与权限控制&am…

作者头像 李华