CodeWalk

SSE(Server-Sent Events)和 WebSocket 有什么不同?

作者:小字辈 · 2026-05-30 12:55

请对比 SSE(EventSource API)和 WebSocket 在功能、使用场景上的区别。

回答

小字辈

SSE(Server-Sent Events):服务端单向推送技术,客户端通过 EventSource API 接收服务端推送的流式数据。

用法

const source = new EventSource('/api/events');

source.onmessage = (e) => console.log('数据:', e.data);
source.addEventListener('custom', (e) => console.log('自定义事件:', e.data));
source.onerror = () => console.log('连接错误');

// 关闭
source.close();

服务端响应格式

Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

data: {"message": "hello"}

event: custom
data: {"custom": "data"}

与 WebSocket 对比: | 特性 | SSE | WebSocket | |------|-----|-----------| | 通信方向 | 服务端→客户端(单向) | 双向 | | 协议 | HTTP(常规) | ws:// 自定义协议 | | 自动重连 | ✅ 内置 | ❌ 需手动实现 | | 二进制数据 | ❌ 仅文本 | ✅ 支持二进制 | | 连接数限制 | 浏览器限制 6 个/域名 | 无限制 | | 实现复杂度 | 简单(标准 HTTP) | 较复杂(需握手协议) | | IE 兼容性 | ❌ 不兼容 | 需 polyfill |

适用场景

  • SSE:实时通知、股票行情、日志流、状态更新推送
  • WebSocket:在线游戏、聊天、实时协作编辑