问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

WebSocket协议详解:原理、结构与应用场景

创作时间:
作者:
@小白创作中心

WebSocket协议详解:原理、结构与应用场景

引用
IT168
1.
https://net.it168.com/a2025/0213/6877/000006877425.shtml

WebSocket协议是Web开发中常见的通信协议,它解决了HTTP协议在实时通信场景下的性能问题。本文将详细介绍WebSocket协议的工作原理和应用场景,帮助读者更好地理解这一重要的网络协议。

WebSocket协议的背景和优势

Web应用通常采用HTTP协议进行通信:客户端向服务器发送HTTP请求,服务器对请求进行处理后,向客户端回复HTTP响应。换句话说,HTTP协议只能由客户端主动发起请求,服务器被动进行响应。

然而,在许多应用场景中,服务端需要主动向客户端推送数据。例如,在实现Web聊天室功能时,当新消息到达时,服务器必须向客户端推送通知。如果只使用HTTP协议,客户端必须通过轮询来实现这一功能。轮询存在明显的缺陷:如果轮询频率很高,服务器将消耗大量资源;如果控制轮询频率,应用消息通知的实时性又会大打折扣。

为了解决这一问题,计算机网络专家设计了WebSocket协议。WebSocket协议为Web应用引入了套接字(socket)通信能力,提供了一个全双工的通信信道。WebSocket协议以TCP为底层传输协议,能够兼容现有的HTTP代理和中间件,例如Nginx。

WebSocket协议的关键特性

URL格式

WebSocket服务器地址使用URL表示,协议部分为ws(非加密)或wss(加密)。例如:

连接建立过程

WebSocket连接的建立过程如下:

  1. 客户端通过TCP协议连接到服务器。
  2. 客户端通过TCP连接向服务器发送HTTP请求,请求头中包含Upgrade头部,表示希望将连接协议升级到WebSocket。
  3. 服务器检查Upgrade头部,如果支持WebSocket协议,将返回101状态码,表示同意切换协议。
  4. HTTP请求和响应交互完毕后,通信双方就可以在TCP连接上互相发送WebSocket报文。

数据帧结构

WebSocket协议将数据组织成一系列帧(frame)进行传输。数据帧的报文结构如下:

  • 标志位:占4位,每个标识占一位,包括:
  • FIN:表示是否是最后一个数据帧
  • RSV1、RSV2和RSV3:保留位
  • OPCODE:操作码,表示帧的类型
  • MASK位:表示承载数据是否做掩码处理
  • 数据长度:占7位,表示数据负载的长度
  • 扩展数据长度:占用0、2或8字节,由前一个字段决定
  • 掩码Key:数据帧开启掩码处理时才有,占用4个字节
  • 承载数据:即数据帧承载的应用层数据

数据长度字段的处理方式如下:

  • 当该字段小于126时,直接表示数据长度
  • 当该字段等于126时,数据长度由其后的2字节扩展字段表示
  • 当该字段等于127时,数据长度由其后的8字节扩展字段表示

控制帧和非控制帧

WebSocket帧可以分为控制帧和非控制帧两类:

  • 控制帧:包括close、ping和pong三种
  • close帧用于关闭连接
  • ping帧用于检测连接状态
  • pong帧用于响应ping帧
  • 非控制帧:包括text和binary两种
  • text帧用于传输文本数据
  • binary帧用于传输二进制数据

总结

WebSocket协议具有以下特点:

  • 兼容HTTP协议,借助HTTP请求建立连接
  • 通信分为两个阶段:连接建立阶段使用HTTP,数据通信阶段使用WebSocket
  • 通信报文为帧,一个帧由头部和数据两部分组成
  • 帧头部保存操作码和数据长度等字段
  • 根据操作码不同,WebSocket帧可以分为控制帧和非控制帧两类
  • 控制帧用于连接管理和状态检测
  • 非控制帧用于传输应用层数据

WebSocket协议在实时通信场景中具有广泛的应用,如在线聊天、实时数据更新等。掌握WebSocket协议的工作原理,对于Web开发人员来说非常重要。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号