未找到匹配的笔记

SSE - Server-SendEvent

网络

概念

SSE 全称Server-Sent Eents, 是HTML5标准的一部分,它的核心是基于HTTP长连接的服务器单向推送技术

  1. 客户端通过EventSourceAPI发起一个HTTP的GET请求
  2. 服务器响应的ContentType设置为text/event-stream
  3. 连接保持打开状态,服务器可以持续发送数据
  4. 数据格式遵循特定的文本协议,每个消息以\n\n结束

特点

协议层的天然优势

  • 协议层:基于HTTP协议,现在的硬件设备原生都支持
  • 安全集成:直接复用现有的认证机制,不需要设计独立的健全方案
  • 监控链路:HTTP的监控体系可以直接复用,包括请求日志,性能指标、错误追踪等

内置的客户端健壮性

  • 自动重连机制:连接断开后,浏览器会自动尝试重连,无需手动实现
  • 消息ID追踪:通过Last-Event-ID头部,客户端重连时可以告诉服务器从哪里断开,服务器可以从断点继续发送,避免消息丢失、
  • 连接状态管理:浏览器自动处理TCP层面的连接保持和心跳

与WebSocket的核心技术差异

连接建立层面:

SSE:标准的HTTP GET请求,遵循完整的HTTP握手流程,包括TLS协商、认证等。

WebSocket:基于HTTP Upgrade机制切换到独立的ws协议,建立完全独立的二进制通道

数据传输层面:

SSE:文本格式,UTF-8编码,每个消息以\n\n分隔,自动自持多行数据

WebSocket:支持文本和二进制帧,帧结构更紧凑,但需要手动处理消息分片和组装

连接层面管理:

SSE:浏览器自动管理重连,开发者可设置retry字段控制重试间隔

WebSocket:需要手动实现ping/pong心跳、重连逻辑、连接状态机