实时推送场景下,WebSocket 与 Server-Sent Events(SSE)是两种主流方案,选型需结合业务方向性与基础设施。
一、核心差异
| 维度 | WebSocket | SSE |
|---|---|---|
| 通信方向 | 全双工 | 服务端到客户端单向 |
| 协议 | 独立协议(握手升级) | 基于 HTTP |
| 自动重连 | 需自行实现 | 浏览器内置 |
| 代理兼容性 | 部分老旧代理不支持 | 兼容性好 |
| 二进制支持 | 支持 | 仅文本 |
二、SSE 服务端示例
javascript
app.get('/events', (req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
const timer = setInterval(() => {
res.write(`data: ${JSON.stringify({ ts: Date.now() })}\n\n`);
}, 1000);
req.on('close', () => clearInterval(timer));
});若仅需服务端单向推送(如通知、日志流),SSE 更简单且天然支持断线重连;若需双向低延迟交互(如聊天、协同编辑),则选择 WebSocket。