MST

星途 面试题库

面试题:网络编程中WebSocket全双工通信模式的实现原理

请阐述WebSocket全双工通信模式在网络编程中的实现原理,包括与传统HTTP协议的区别,以及如何建立和维持这种全双工连接。
33.8万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

WebSocket全双工通信模式实现原理

  1. 基本概念:WebSocket是一种在单个TCP连接上进行全双工通信的协议。允许服务端主动向客户端推送数据,客户端也能主动向服务端发送数据,打破了HTTP只能由客户端发起请求的限制。
  2. 原理基础:基于TCP协议,在应用层协议层面实现双向数据传输。通过HTTP的Upgrade首部字段,从HTTP协议“升级”到WebSocket协议。

与传统HTTP协议的区别

  1. 连接性质
    • HTTP:是无状态、短连接协议,每次请求 - 响应完成后,连接通常关闭。客户端发起请求,服务端响应,服务端无法主动向客户端推送数据。
    • WebSocket:是有状态、长连接协议,一旦建立连接,双方可随时相互发送数据。
  2. 头部开销
    • HTTP:每次请求都要携带大量头部信息,即使是简单请求,头部也可能较大。
    • WebSocket:握手时使用HTTP协议,建立连接后数据传输头部开销小,一般2 - 10字节。
  3. 协议特点
    • HTTP:基于请求 - 响应模型,适用于获取资源。
    • WebSocket:全双工通信,更适合实时交互场景,如聊天、实时监控等。

建立和维持全双工连接

  1. 建立连接(握手过程)
    • 客户端请求:客户端发起HTTP请求,包含特殊的Upgrade首部字段,表明想要升级到WebSocket协议。例如:
GET /ws HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Key: dGhlIHNhbXBsZSBub25jZQ==
Sec - WebSocket - Version: 13
- **服务端响应**:服务端如果支持WebSocket协议,会返回101 Switching Protocols状态码,并携带相应头部。例如:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
- **校验过程**:服务端接收客户端的Sec - WebSocket - Key,将其与固定字符串“258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11”拼接,进行SHA - 1哈希计算,再进行Base64编码,得到的结果与客户端发送的Sec - WebSocket - Accept进行对比,一致则握手成功。

2. 维持连接: - 心跳机制:为了检测连接是否存活,防止网络中间节点(如防火墙、代理等)将长时间无数据传输的连接关闭,WebSocket双方通常会定时发送心跳包(Ping和Pong帧)。客户端发送Ping帧,服务端收到后回复Pong帧,反之亦然。 - 协议规范保证:WebSocket协议自身对连接的关闭有明确规范,正常关闭时会发送关闭帧(Close帧),携带关闭状态码和可选的关闭原因,双方收到关闭帧后按规范处理连接关闭流程,避免异常断开导致资源浪费或状态不一致。