Communication
Long polling / WebSockets / SSE
实时通信方式
早期 web 应用基本是 client-server 模型,client 只能主动请求,server 无法主动 push 数据。以下是常见的实时通信方案。

Trade-off 快览
- Long Polling:实现简单,但连接频繁重建、资源消耗高
- WebSockets:全双工长连接,实时性强,但需要连接管理与扩展策略
- SSE:单向推送更轻量,适合通知流
Long polling
HTTP Long polling 让 server 在有消息时尽快返回,从而“模拟” server push。server 收到请求后不立即关闭连接,而是等到有新消息或 timeout 才响应。

Client 收到响应后会立刻发起下一次请求,形成持续的 pending connection。
Working
- Client 发起请求并等待响应。
- Server 收到请求后延迟响应,直到有更新。
- 有更新时返回响应。
- Client 收到后立即发起下一次请求。
Advantages
- 实现简单,适合小规模项目
- 几乎所有环境都支持
Disadvantages
- 不够 scalable
- 每次都新建连接,server 压力大
- 多请求情况下消息顺序可能混乱
- 需要等待新请求导致 latency 增加
WebSockets
WebSocket 在单一 TCP 连接上提供 full-duplex 通信,client 与 server 任意一方都可以随时发送数据。连接通过 WebSocket handshake 建立,成功后可双向实时通信。

WebSocket 允许 server 主动发送内容,并保持连接持续开放。
Working
- Client 发起 WebSocket handshake 请求。
- 请求包含 HTTP Upgrade header,切换协议到
ws://。 - Server 返回响应,确认 handshake。
- 连接建立后,双方可双向发送数据。
- 连接由 client 或 server 决定关闭。
Advantages
- Full-duplex async messaging
- 更好的 origin-based security
- 对 client / server 都轻量
Disadvantages
- 断线后不会自动恢复
- 老旧浏览器不支持(影响逐渐减少)
Server-Sent Events (SSE)
SSE 是一种长期连接方式,允许 server 主动推送数据给 client。它是单向的:client 发起请求后只能接收数据,不能复用同一连接向 server 发送新请求。

Working
- Client 向 server 发请求。
- 连接建立并保持打开。
- Server 在有新数据时推送事件。
Advantages
- 实现简单
- 大多数浏览器支持
- 穿透防火墙问题少
Disadvantages
- 单向限制
- 连接数上限
- 不支持二进制数据