WebSocket 协议的工作原理如下:
WebSocket 是独立的基于TCP 的全双工通信协议,不属于HTTP的增强或替代。它核心解决一个问题:在浏览器和服务器之间维持一条持久、双向、低开销的数据通道。与HTTP的半双工通信不同,WebSocket 在连接建立后,客户端和服务器可以在任意时刻互相发送数据帧,无需每次通信都重新建立连接。
HTTP协议采用请求-响应模式,每次数据交换都需要客户端主动发起请求,服务器才能返回响应。这种模式下,服务器无法主动推送数据给客户端,只能通过客户端轮询(Polling)或长轮询(Long Polling)来模拟实时性,但会产生大量冗余HTTP头和连接建立开销。WebSocket 通过一次HTTP握手升级协议后,在同一TCP连接上保持长连接,双方均可主动发送消息,实现了真正的双向实时通信。
WebSocket 协议本身运行在TCP之上,在握手阶段借用HTTP/1.1的GET请求来完成协议升级。握手成功后,通信双方不再使用HTTP语义,而是使用WebSocket专用的轻量级帧协议(Frame Protocol)来封装和传输数据。每个WebSocket帧包含操作码(Opcode)、掩码位(Mask)、载荷长度等字段,结构紧凑,头部开销最小仅为2字节(无掩码时)或6字节(含掩码时)。
除了基础的RFC 6455标准外,WebSocket 协议还有两个重要的演进标准: