一、短轮询(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)
实时性 极高
资源消耗 高(频繁请求) 中(挂起连接)
主动推送 无(客户端拉取) 无(客户端拉取) 服务端单向推送 双向主动推送
典型场景 定时数据刷新 简易通知 / 聊天 服务端主动推数据 强实时双向交互
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐