WebSocket是HTML5定义的全双工、持久化TCP通信协议,通过HTTP握手升级建立连接,实现客户端与服务器双向实时通信,协议标识为ws://或wss://,数据帧轻量、低延迟、高效率。

HTML5 WebSocket API 的核心,是让浏览器和服务器之间建立一条真正的双向通道——不是你发我收、再等我回,而是双方随时能说话、随时能听,互不干扰。
WebSocket 是什么?
它是一种基于 TCP 的通信协议,属于 HTML5 标准的一部分(W3C 与 IETF RFC 6455 规范)。和 HTTP 不同,它不走“请求→响应”老路,而是在一次 HTTP 握手后,把连接直接升级为持久、低开销的全双工通道。
- 协议标识为 ws://(开发用)或 wss://(生产必须,即 TLS 加密)
- 连接建立后,客户端和服务端地位完全平等,都能主动发消息
- 没有频繁的头部开销,数据帧轻量,适合高频、低延迟场景(如聊天、行情、协同编辑)
全双工通信怎么实现的?
不是靠轮询或长连接模拟,而是协议原生支持的并行收发能力:
- 客户端调用 socket.send(),服务端立刻收到,无需等待任何触发
- 服务端也能随时调用 ws.send() 向任意已连接客户端推送,比如通知新消息、状态变更
- 双方收发互不影响:发送过程中,仍可正常接收新消息;处理一条消息时,下一条已进入队列
连接是怎么建立起来的?
靠一次标准的 HTTP 协议升级握手:
立即学习“前端免费学习笔记(深入)”;
- 浏览器发一个带 Upgrade: websocket 和 Connection: Upgrade 的 GET 请求
- 服务端验证后,返回 HTTP 101 Switching Protocols 响应,正式切换协议
- 之后所有数据都走二进制帧传输,不再经过 HTTP 解析,大幅降低延迟和带宽消耗
为什么说它比轮询更高效?
传统轮询要反复建连接、传完整 HTTP 头,而 WebSocket:
- 仅握手阶段有 HTTP 开销,后续通信无头部负担
- 单连接复用,避免 TCP 握手/挥手开销
- 实测带宽利用率可提升 70% 以上,尤其在小消息高频交互场景中优势明显



















