SSE(Server-Sent Events)和 WebSocket 有什么不同?
请对比 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:在线游戏、聊天、实时协作编辑