当前位置: 首页 > news >正文

SSE库选型+fetch-event-source示例

SSE

SSE(Server-Sent Events)是一种基于 HTTP 的单向推送技术,允许服务端在一个长连接中持续向客户端发送事件。

与 WebSocket 的双向通信不同,SSE 更适合一些只需要从服务器获取数据的场景,比如实时新闻更新、股票行情、通知系统等。

针对项目实际需求(需携带 Authorization 头、支持精细错误处理),评估了三种主流方案。

方案对比

原生浏览器 EventSource API 使用简单,但在鉴权、错误处理及非浏览器环境支持上存在明显限制。

特性原生EventSourceevent-source-polyfill@microsoft/fetch-event-source(推荐)
实现方式浏览器原生 API基于 XMLHttpRequest 模拟 EventSource 行为基于 fetch 实现
请求方法GET,http长连接通常模拟GET基于 fetch,请求控制更灵活
自定义请求头❌ 不支持✅ 支持✅ 支持
鉴权方式通常依赖 cookie 或 query可传Authorization可传Authorization
握手阶段校验能力较弱一般可在 onopen 中校验状态码、content-type
错误处理较弱一般细粒度:可区分HTTP 错误、响应类型异常、流关闭等
连接控制较弱一般支持 AbortController 便于主动断开
重试治理不可控,依赖浏览器默认行为一般可结合业务逻辑自定义重试策略
Node / SSR 适配不友好(Node.js 无原生支持)主要面向浏览器更容易适配具备 fetch 能力的运行环境
页面可见性感知集成 Page Visibility API 页面隐藏自动断连,可见时恢复(可配置关闭)
适用场景简单 SSE兼容场景、旧方案改造现代前端项目、鉴权复杂场景
Github stars-2.1k ⭐2.8k ⭐
github地址-https://github.com/Yaffle/EventSourcehttps://github.com/Azure/fetch-event-source

综上,更推荐使用 @microsoft/fetch-event-source

  1. 基于 fetch 实现,请求控制更灵活,可携带Authorization等自定义请求头。
  2. 可在onopen、onerror、onclose 对连接状态和异常进行更清晰的调试与处理,识别连接中断等问题。
  3. 支持AbortController,便于业务侧结合页面生命周期主动中断连接。
    相比原生 EventSource 和 event-source-polyfill,它更符合“鉴权能力、连接控制、错误可观测性”的要求

fetch-event-source实践代码


这是一个订阅消息通知的接口示例展示👆

从浏览器调试面板可以看到,SSE 服务端返回的并不是一次性响应,而是持续推送的事件流。
其中,CONNECT表示连接建立成功,UNREAD_COUNT表示一条具体业务消息,消息体为{"message":0}
前端可以在onmessage中根据事件类型分别处理连接状态和业务数据,这也是 SSE 特别适合通知、状态流等场景的原因。

import{fetchEventSource,EventSourceMessage}from'@microsoft/fetch-event-source'classFatalErrorextendsError{}classRetriableErrorextendsError{}interfaceNoticeSubscribeOptions{token:string appId?:string onConnected?:()=>voidonUnreadCount?:(count:number)=>voidonFatalError?:(message:string)=>void}exportfunctionsubscribeNoticeSSE(url:string,options:NoticeSubscribeOptions,){constcontroller=newAbortController()consttask=fetchEventSource(url,{method:'GET',signal:controller.signal,openWhenHidden:true,headers:{Accept:'text/event-stream',Authorization:options.token.startsWith('Bearer ')?options.token:`Bearer${options.token}`,...(options.appId?{appId:options.appId}:{}),},asynconopen(response){if(response.status===401||response.status===403){thrownewFatalError('SSE 鉴权失败')}if(!response.ok){thrownewRetriableError(`SSE 连接失败,HTTP${response.status}`)}constcontentType=response.headers.get('content-type')||''if(!contentType.includes('text/event-stream')){thrownewFatalError(`接口返回的不是 SSE:${contentType}`)}},onmessage(event:EventSourceMessage){switch(event.event){case'CONNECT':options.onConnected?.()returncase'UNREAD_COUNT':{try{constpayload=JSON.parse(event.data)as{message?:number|string}options.onUnreadCount?.(Number(payload.message??0))}catch{thrownewFatalError('UNREAD_COUNT 消息格式错误')}return}default:console.debug('[SSE] unknown event:',event.event,event.data)}},onclose(){// 如果业务上不期望服务端主动结束,可以在这里抛错并交给 onerror 重试thrownewRetriableError('SSE 连接已关闭')},onerror(error){if(errorinstanceofFatalError){options.onFatalError?.(error.message)throwerror}console.warn('[SSE retry]',error)return3000},})task.catch((error)=>{if(!controller.signal.aborted){console.error('[SSE stopped]',error)}})return()=>controller.abort()}
http://www.jsqmd.com/news/691200/

相关文章:

  • VSCode容器化调试失效的7大隐性陷阱(2026版内核级日志追踪实录):92%开发者踩坑却不知其源
  • mp-html实战指南:小程序富文本解析的深度避坑手册
  • 2026年机器人编码器厂家排行榜:国产高端突围,锐鹰传感领跑赛道
  • 云原生入门系列|第4集:K8s控制器全解析!零基础搞懂Deployment部署的底层逻辑
  • 什么样的高新技术企业容易被“选中”核查?核查的重点又是什么?
  • 问卷设计对比:手工瞎编 vs AI 智能生成,为什么虎贲等考 AI 一次就能过审?
  • Qwen3.5-9B软件测试面试宝典:用例设计与自动化脚本生成
  • 千问3.5-9B在C语言教学中的应用:代码分析与调试助手
  • DeepPCB:如何用1500对工业级图像彻底解决PCB缺陷检测难题?
  • 2026溧阳车窗贴膜技术全解析:溧阳车身贴膜、溧阳隐形车衣、溧阳高端汽车贴膜、溧阳专业贴膜、溧阳全车贴膜、溧阳新车贴膜选择指南 - 优质品牌商家
  • 10个Python一行代码实现时间序列特征工程
  • 2026道路隔音板厂家推荐 产能规模+专利技术+环保认证三重保障 - 爱采购寻源宝典
  • 告别低效培训!SKC 智能知识协作平台:让企业学习从 “走过场” 变 “真落地”
  • 万象视界灵坛一文详解:像素风UI如何降低多模态分析认知负荷
  • 四川企业必看:2026年政府资金申报指南——专项债、中央预算内投资、超长期特别国债怎么申请?
  • Real-Anime-Z在软件测试中的应用:自动生成UI测试用例配图
  • 2026钢筋焊接网片厂家推荐排行榜产能规模与专利技术双维度权威对比 - 爱采购寻源宝典
  • 2026强制循环泵厂家推荐江苏玖弘泵业领衔,产能与专利双优势 - 爱采购寻源宝典
  • Phi-4-mini-reasoning高算力适配教程:A10/A100显卡vLLM推理性能调优
  • 机器学习课程学习总结与车牌识别AI项目实践
  • 不同水质检测标准不同
  • 2026年3月行业内OK镜除蛋白AB液直销厂家,OK镜全自动清洗器/OK镜消毒烘干收纳箱,OK镜除蛋白AB液厂商选哪家 - 品牌推荐师
  • 2026长春成人小提琴培训怎么选:长春成人小提琴课、长春Hi小提琴音乐中心、长春小提琴一对一、长春小提琴培训班选择指南 - 优质品牌商家
  • macOS虚拟机解锁神器:让VMware ESXi也能运行苹果系统
  • 告别闪烁!优化ESP32+ST7789滚屏效果的3个关键技巧(SPI时序与双缓冲)
  • Linux-15 ubuntu 和 windows 双系统,更新系统导致丢失ubuntu 入口
  • 2026年二手钢结构出售的降本技术路径全解析:二手钢结构拆除/二手钢结构材料/二手钢结构构件/二手钢结构现货/二手钢结构立柱/选择指南 - 优质品牌商家
  • 计算机视觉与生成式AI融合的技术演进与实践
  • 从日更 1 篇到批量霸屏:CSDN 创作者会员(数字营销版)深度测评
  • 2026生物质颗粒机厂家推荐排行榜产能与专利双优的权威之选 - 爱采购寻源宝典