引入

普通 HTTP 通常由客户端发起请求,服务器返回响应。实时聊天、在线协作和行情推送需要服务器主动把新消息发送给客户端,如果不断轮询,不仅增加请求数量,也会引入延迟,因此需要长连接通信机制。

正文

定义

WebSocket 是一种在客户端与服务器之间建立持久连接,并支持双方主动发送消息的通信协议。连接建立后,通信不再局限于“一问一答”的 HTTP 请求模型。

建立连接

WebSocket 通常先通过 HTTP Upgrade 请求发起握手。服务器同意后返回 101 Switching Protocols,连接从 HTTP 升级为 WebSocket;之后双方通过帧持续交换数据。

适用场景

场景为什么适合 WebSocket需要考虑的问题
在线聊天消息可以实时双向到达重连、离线消息、顺序
协作编辑服务端可广播变更冲突处理、权限校验
实时状态减少轮询延迟心跳、连接数量、背压
实时行情服务器主动推送数据频率和客户端消费能力

前端使用时的边界

  • 连接断开后需要设计重连策略,不能无限快速重试。
  • 应通过心跳或协议机制发现失效连接。
  • 服务端仍需验证每条消息的身份和权限,不能因为连接已建立就默认可信。
  • 大量连接会增加服务端连接管理和扩展成本。
  • 如果只是偶尔获取数据,普通 HTTP、轮询或 SSE 可能更简单。

引出

选择 WebSocket 前,先确认需求是否真的需要双向实时通信。对于只有服务器向客户端推送的场景,可以继续比较 SSE;对于一次性资源获取,则优先使用普通 HTTP。