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

SSE (Server-Sent Events) 技术简介

一、SSE 技术概述

Server-Sent Events (SSE) 是一种允许服务器向客户端实时推送数据的 Web 技术,它基于 HTTP 协议实现服务器到客户端的单向通信。
基本特点
● 单向通信:仅服务器→客户端方向
● 基于HTTP:使用标准HTTP协议,无需特殊协议
● 文本格式:默认传输UTF-8编码的文本数据
● 自动重连:内置连接中断恢复机制
● 轻量级:相比WebSocket更简单轻量

二、技术原理

1. 通信机制

SSE 通过长连接机制工作:

  1. 客户端建立常规HTTP连接
  2. 服务器保持连接打开 (Connection: keep-alive)
  3. 服务器通过此连接持续发送事件流
  4. 连接中断后客户端自动尝试重新连接

2. 协议细节

● Content-Type:text/event-stream
● Cache-Control:no-cache
● 编码:UTF-8

三、SSE 与相关技术对比

特性SSEWebSocketLong Polling
通信方向单向(服务器→客户端)双向半双工
协议基础HTTP独立协议HTTP
连接复杂度简单中等简单
断线重连自动需手动实现需手动实现
数据传输格式文本二进制/文本文本

四、SSE 技术实现

1. 客户端实现(@microsoft/fetch-event-source)

客户端建议使用@microsoft/fetch-event-source第三方封装库实现。

fetchEventSource('http://localhost:3000/sse', {method: 'GET',headers: {'Content-Type': 'application/json; charset=utf-8','Accept': 'text/event-stream',// 跨域'Access-Control-Allow-Origin': '*',},onopen(response) {},onmessage(msg) {},onerror(err) {},onclose(res) {},openWhenHidden: true,
});

2. 服务端实现 (Express.js示例)

router.get('/', async function(req, res) {const str = 'hello word!'// 设置 SSE 相关的响应头res.setHeader('Content-Type', 'text/event-stream;charset=utf-8');res.setHeader('Cache-Control', 'no-cache');res.setHeader('Connection', 'keep-alive');res.flushHeaders();let count = 30;const interval = setInterval(() => {count++const message = {time: new Date().toISOString(),content: "有新消息了",code: 0,count: count};res.write(`data: ${JSON.stringify(message)}\n\n`); // 必须有两个\n}, 5000);req.on('close', () => {clearInterval(interval);});
});

五、SSE 消息格式详解

1. 基本字段

data:消息内容(必选)

data: message content\n\n

event:事件类型(可选)

event: customEvent\ndata: {"key":"value"}\n\n

id:事件ID(用于断线重连)

id: 12345\ndata: message\n\n

retry:重连时间(毫秒)

retry: 5000\n\n

六、SSE 高级特性

1. 安全机制

● CORS 支持:同其他HTTP请求一样遵循同源策略
● 认证:可使用Cookie或Authorization头
● HTTPS:生产环境应始终使用加密连接

2. 性能优化

● 压缩:支持gzip/deflate压缩
● 连接复用:HTTP/2下效果更佳
● 缓存控制:合理设置缓存头

3. 扩展应用

● 二进制数据:Base64编码传输
● 组合使用:与REST API配合使用

七、SSE 适用场景

1. 实时通知系统

○ 社交网络更新
○ 系统告警通知

2. 实时数据监控

○ 股票价格变动
○ IoT设备数据流

3. 新闻/体育赛事直播

○ 比分实时更新
○ 新闻快讯推送

4. 进度报告

○ 长时间操作进度
○ 文件处理状态

http://www.xdnf.cn/news/12792.html

相关文章:

  • Java八股文——并发编程「并发安全篇」
  • C-Equilateral Triangle
  • Windows安装Miniconda
  • 鸿蒙学习笔记01
  • 手写 vue 源码 === runtime-core 实现
  • RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
  • Kaggle注册不成功,添加插件header Editor
  • FreeRTOS同步和互斥
  • CppCon 2015 学习:Large Scale C++ With Modules
  • Codeforces Educational 179(ABCDE)
  • MyBatis中foreach集合用法详解
  • yyMMddHHSSS 是什么日期
  • 99. Java 继承(Inheritance)
  • 【Java学习笔记】日期类
  • Selenium4+Python的web自动化测试框架
  • STM32的DMA简介
  • 【面试题】如何保证MQ的消息不丢失、不重复
  • 免费批量PDF转Word工具
  • Java安全点safepoint
  • Java 企业项目中的线程管理策略
  • 四.抽象工厂模式
  • opencv学习笔记2:卷积、均值滤波、中值滤波
  • C语言指针与数组sizeof运算深度解析:从笔试题到内存原理
  • 数学建模期末速成 主成分分析的基本步骤
  • 什么是 Ansible 主机和组变量
  • 如何优化React Native应用以适配HarmonyOS5?
  • python打卡训练营打卡记录day48
  • VLM引导的矢量草图生成AutoSketch
  • 数据库入门:从原理到应用
  • Windows之官方Sysinternals工具集