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

前端通信库fetch-event-source实现丰富的SSE

环境:SpringBoot3.4.0 + Vue3



1. 简介

SSE(Server-Sent Events)是一种基于HTTP的服务器向客户端单向推送实时数据的轻量级协议,配合浏览器原生EventSource API,可实现高效实时通信。前端通过创建EventSource对象订阅服务端流,自动处理连接、重试与数据解析;服务端设置Content-Type: text/event-stream响应头,以data:前缀发送JSON/文本数据,双换行符分隔消息。其优势在于:

  • 协议简单,无需WebSocket复杂握手

  • 天然支持断线重连

  • 兼容主流浏览器

  • 适合实时通知、股票行情等单向推送场景。后端实现需注意保持长连接(如循环发送注释保持活跃),前端需监听message事件处理数据,并通过error事件监控连接状态。相比轮询,SSE显著降低延迟与资源消耗,是Web实时应用的优选方案之一。

然而当前端通过EventSource API发起请求时有几个限制:只允许传递的参数是url和withCredentials,因此:

  1. 无法传递请求体:你必须在URL内编码执行请求所需的所有信息,而在大多数浏览器中,URL的长度是有限制的(不同浏览器可能还不一样)。

  2. 无法传递自定义请求头。

  3. 只能发起GET请求——无法指定其他方法。

  4. 如果连接中断,你无法控制重试策略:浏览器会默默地为你重试几次然后停止,这对于任何健壮的应用程序来说都远远不够。

本篇文章我们将介绍一个开源组件fetch-event-source,该组件在发起事件源请求时,同时拥有Fetch API所提供的所有功能。

接下来,我们将完整实现一个基于SSE(Server-Sent Events)与Fetch-Event-Source API结合的实时通信示例。

2. 实战案例

2.1 准备环境

@RestController@RequestMapping("/api")public class SseController {
    private final Map<String, SseEmitter> emitters = new ConcurrentHashMap<>() ;    @GetMapping(path = "/sse/{username}", produces=MediaType.TEXT_EVENT_STREAM_VALUE)  public SseEmitter handler(@PathVariable String username) throws Exception {
      SseEmitter sse = new SseEmitter() ;    emitters.put(username, sse) ;    sse.send(new R(0, "欢迎," + username), MediaType.APPLICATION_JSON) ;    return sse ;  }    @PostMapping(path = "/sse", produces=MediaType.TEXT_EVENT_STREAM_VALUE)  public SseEmitter handler(@RequestBody Map<String, Object> data) throws Exception {
      System.err.printf("收到请求数据: %s%n", data) ;    SseEmitter sse = new SseEmitter() ;    String username = data.get("u

相关文章:

  • 【C++经典例题】字符串转整数(atoi)的实现与解析
  • 使用Go语言实现自动清理应用系统日志
  • WP最主题专业的wordpress主题开发
  • 24体育NBA足球直播M24模板自适应板源码
  • Python - 爬虫-网页抓取数据-库requests
  • Docker 是什么? Docker 基本观念介绍与容器和虚拟机的比较
  • 迟滞模式控制的学习
  • 车辆北斗GPS双模定位管理系统 车载定位终端
  • 【学习笔记】CPU 的“超线程”是什么?
  • Opencv计算机视觉编程攻略-第十三节 跟踪视频中的物品
  • 基于 Python 卷积神经网络的新闻文本分类系统,附源码
  • Zookeeper的通知机制是什么?
  • 高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案(悲观锁、乐观锁、分布式锁)
  • 实践 DevOps 项目:使用 Terraform、Helm、SonarQube 和 GitLab CI/CD 在 AWS EKS 上实践全栈部署
  • 深入理解 HTML5 Audio:网页音频播放的新时代
  • VMware Workstation/Player 的详细安装使用指南
  • zabbix和prometheus选择那个监控呢
  • 【Vue #2】脚手架 指令
  • 【Java学习】之AI时代下,Java工程师如何修炼
  • 【杂项】常见的坐标系及其使用方法