server sent events实现日志实时输出
2025-3-14
| 2025-3-14
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password
Server-Sent Events(SSE)是一种基于 HTTP 协议的服务器到客户端的单向实时通信技术,允许服务器主动向客户端(如浏览器)推送数据流。以下从核心概念、技术原理、应用场景和局限性等方面全面解析 SSE:

一、核心概念

  1. 单向通信 SSE 仅支持服务器向客户端推送数据,客户端无法通过同一连接向服务器发送请求。这种单向性使其适用于只需服务端主动推送的场景,如新闻更新、实时数据展示等
  1. 基于 HTTP 与 WebSocket 不同,SSE 完全基于 HTTP 协议,无需切换协议或端口,兼容现有 HTTP 基础设施(如反向代理、负载均衡)
  1. 轻量级与自动重连 SSE 提供自动重连机制(通过 retry 字段控制重试间隔),且客户端 API(EventSource)简单易用,无需额外库支持

二、技术原理

  1. 连接建立
      • 客户端通过 EventSource 发起 HTTP GET 请求,请求头需包含 Accept: text/event-stream
      • 服务器响应头需设置 Content-Type: text/event-stream 和 Cache-Control: no-cache,以标识 SSE 数据流并禁用缓存 。
  1. 数据格式 服务器发送的数据遵循特定格式:。
    1.  
      event: customEvent data: 消息内容(可多行) id: 12345 // 事件唯一标识符(用于断线重连) retry: 5000 // 重连间隔(毫秒) \n\n // 两个换行符表示一条消息结束
      客户端通过监听特定事件(如 onmessage 或自定义事件 ping)处理数据
  1. 长连接与心跳机制
      • 服务器保持 TCP 连接开放,持续发送数据流。
      • 为避免连接超时,服务器可定期发送“心跳消息”(如空注释行 : heartbeat\n\n
  1. 实时通知
      • 社交媒体动态、聊天消息、订单状态更新等
      • 示例:外卖平台实时推送配送进度
  1. 数据流推送
      • 股票行情、IoT 设备数据、日志监控等持续数据流
      • 示例:ChatGPT 逐字生成回答时使用 SSE 边计算边返回 。
  1. 低复杂度场景
      • 需快速实现的轻量级实时功能(如网页版在线考试倒计时)

四、与 WebSocket 的对比

特性
SSE
WebSocket
通信方向
单向(服务端→客户端)
双向
协议
HTTP
WebSocket(独立协议)
自动重连
支持
需客户端实现
数据格式
文本(需编码处理二进制数据)
支持文本和二进制
适用场景
服务端主导的推送
双向交互(如聊天、游戏)
浏览器兼容性
大部分现代浏览器(IE 不支持)
主流浏览器均支持

五、局限性

  1. 单向性限制 无法实现客户端向服务器的实时交互,需结合其他技术(如 AJAX)完成双向通信
  1. 连接数限制 HTTP/1.1 下浏览器对同一域名的 SSE 连接数有限制(通常 6 个),HTTP/2 可通过多路复用缓解此问题。
  1. 旧浏览器兼容性 IE 和早期 Edge 浏览器不支持 SSE,需降级为轮询或长轮询
git cherry-pickDeep Dive into LLMs like ChatGPT
Loading...
Catalog