WebSocket 是一种在 HTTP 握手后通过 HTTP Upgrade 切换协议,并在一个 TCP 连接上进行 全双工通信 的应用层协议。
它适合需要低延迟、双向实时通信的场景,例如聊天、协同编辑、实时行情、游戏状态同步和浏览器远程控制。连接建立后,客户端和服务器都可以主动发送消息,不需要每次通信都重新发起 HTTP 请求。
核心概念
- 一次握手,持续通信:先用 HTTP 完成握手,再升级为 WebSocket 帧协议。
- 双向推送:客户端和服务器都能主动发送消息,不局限于请求/响应。
- 长连接成本:连接长期占用服务器资源,需要处理心跳、断线重连、鉴权刷新和背压。
与 SSE 的区别
SSE 更适合服务器向浏览器单向推送文本事件;WebSocket 更适合双方都要主动发送消息、消息格式不固定或延迟要求更强的交互。