欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > SSE (Server-Sent Events) 技术简介

SSE (Server-Sent Events) 技术简介

2025/8/4 8:10:57 来源:https://blog.csdn.net/2301_76380626/article/details/148515327  浏览:    关键词: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. 进度报告

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词