前端实时通讯技术总结:轮询、长轮询、SSE、WebSocket
·
一、短轮询(Polling)
- 定义:客户端定时主动向服务端发送 HTTP 请求,询问是否有新数据,服务端即时响应(有数据则返回,无数据则返回空)。
- 通讯方向:双向数据流(客户端→服务端请求,服务端→客户端响应),但属于请求 - 响应模型,服务端无法主动推送。
- 协议:HTTP
- 实时性:低(依赖轮询间隔,如每 5 秒请求一次,最多延迟 5 秒)
- 资源消耗:高(频繁建立 / 断开 HTTP 连接,无效请求多)
- 使用场景:对实时性要求不高的场景,如普通数据定时刷新(天气、新闻列表)。
二、长轮询(Long Polling)
- 定义:客户端发送 HTTP 请求后,服务端挂起连接不立即响应,直到有新数据或超时才返回;客户端收到响应后,立即发起下一次请求,维持 “长连接” 的错觉。
- 通讯方向:双向数据流(客户端→服务端请求,服务端→客户端响应),本质仍是请求 - 响应模型。
- 协议:HTTP
- 实时性:中(依赖服务端数据产生速度,无数据时延迟高)
- 资源消耗:中(减少无效请求,但仍需频繁建连)
- 使用场景:对实时性有一定要求,但无法使用 WebSocket 的场景(如旧浏览器兼容),例如简易聊天、通知提醒。
三、SSE(Server-Sent Events)
- 定义:客户端发起一次 HTTP 请求,与服务端建立持久连接,服务端可主动、单向地向客户端推送数据(基于事件流格式)。
- 通讯方向:单向数据流(仅服务端→客户端主动推送),客户端若需向服务端发数据,需通过普通 HTTP 请求。
- 协议:基于 HTTP 的持久连接(协议仍为 HTTP)
- 实时性:高(服务端可实时推送)
- 资源消耗:低(单连接持久化,无需频繁建连)
- 使用场景:服务端主动推送实时数据的场景,如实时新闻、股票行情、系统通知。
四、WebSocket
- 定义:基于 TCP 的独立协议,客户端与服务端建立连接后,双向对等实时通信(双方可主动发送数据,无需请求 - 响应)。
- 通讯方向:双向数据流(服务端↔客户端全双工通信)
- 协议:WebSocket(基于 TCP,握手阶段依赖 HTTP 升级机制)
- 实时性:极高(毫秒级双向实时交互)
- 资源消耗:低(单连接持久化,双向复用)
- 使用场景:强实时双向交互场景,如即时聊天、协同编辑、游戏、实时监控。
五、核心对比表
| 特性 | 短轮询 | 长轮询 | SSE | WebSocket |
|---|---|---|---|---|
| 通讯方向 | 双向(请求 - 响应) | 双向(请求 - 响应) | 单向(服务端→客户端) | 双向(全双工) |
| 协议 | HTTP | HTTP | HTTP | WebSocket(基于 TCP) |
| 实时性 | 低 | 中 | 高 | 极高 |
| 资源消耗 | 高(频繁请求) | 中(挂起连接) | 低 | 低 |
| 主动推送 | 无(客户端拉取) | 无(客户端拉取) | 服务端单向推送 | 双向主动推送 |
| 典型场景 | 定时数据刷新 | 简易通知 / 聊天 | 服务端主动推数据 | 强实时双向交互 |
更多推荐


所有评论(0)