WebSocket协议

首先我们要了解http协议与https协议。协议其实就是数据块(存储特定格式的数据库)

其中https协议就是在http协议的基础上进行加密(SSL/TLS).http是应用层协议

http请求:由客户端发起的

  • get  静态资源
  • post  动态资源

http响应

1、websocket协议详解

属于全双工通信协议,允许客户端和服务器之间建立持久化的双向通讯连接。WebSocket协议设计的初衷就是解决HTTP协议在实时交互的局限性,例如长轮询、Ajax方法的高延迟问题,WebSocket可以在单个TCP连接上实现客户端与服务器之间的实时低延迟数据传输。

其中http1.1建立的就是短连接

1.1单工、半双公和双工

这三个术语描通讯方向性,主要适应数据传输和网络通讯。

  • 单工:单工通讯是单向的,数据只能从发送方传送到接受发,而无法反向传输,通讯过程不支持反馈。例如电视广播、传统广播电台
  • 半双工:半双工通信是双向的,但是任何时刻只能有一个方向的数据传输。发送方和接收方可以交替发送和接收数据,但不能同时进行。例:对讲机
  • 双工:双工通讯是完全双向的,数据可以同时在两个方向传输。发送方和接收方可以同时发送和接收数据。例如,电话通讯;网络通信。

1.2Http的局限性

HTTP(超文本传输协议)是一种用于传输数据的协议,具有局限性。

  1. 无状态性:HTTP是一种无状态协议,每次请求都是独立的,不会保留客户端的上下文信息。这使得用户会话和状态管理变得复杂,需要额外的机制(cookies或sessions)
  2. 性能问题:延迟,每次请求都需要重新建立连接,尤其是HTTP1.1,存在多个请求会造成额外延迟;宽带浪费:每次请求都需要发送请求头,增加网络宽带消耗。
  3. 安全性:HTTP是明文,容易被窃听篡改。HTTP本身不提供加密,HTTPS使用SSL/TLS进行加密。
  4. 不支持双向通信:是请求-响应模型。
  5. 请求重定向和缓存管理复杂性:HTTP请求重定向和缓存管理可能导致性能下降。
  6. 适应性差:HTTP初衷是静态页面传输,现代动态内容支持不够灵活。

虽然HTTP是互联网通讯的基础,其局限性便于开发者。代替方案:websocket、HTTP2.0 和HTTP3.0。

2、WebSocket

2.1标准协议

websocket是基于TCP的协议,连接从一个标准的HTTP请求开始,经过一次协议升级后,建立一个全双工的websocket连接

webSokcet默认端口

  • 80端口 : 非加密的WebSocket,使用wsl开头
  • 443端口:加密的WebSocket协议(SSL/TSL加密),wss开头

WebSocket与URL类似,但是有一些特定的细节。

ws://[host]:[port]/[path]
  1. 协议
    • ws:// :表示WebSocket协议
    • wss:// :表示WebSocket Secure(加密的WebSocket),类似于HTTPS
  2. 主机(host)
    • 服务器的域名或IP地址:例如192.168.1.100
  3. 端口(port)
    • webSocket默认80(ws)和443(wss)。
  4. 路径
    • 服务器上用于WebSocket连接的具体路径

2.2 工作原理

2.2.1 握手阶段

WebSocket连接从HTPP请求开始,客户端通过HTTP升级机制请求升级协议

  1. 客户端发起HTTP请求,并在请求中包含特定的WebSocket字段以表示建立WebSocket连接。
    GET /chat HTTP/1.1
    Host:example.com
    Upgrade:websocket
    Connection:Upgrade
    Sec-WebSocket-Key:dGh....==
    Sec-WebSocket-Version: 13

            

    • Upgrade:websocket :表示希望将协议升级为WebSocket
    • Connection:Upgrade 告知服务器此次连接希望协议升级
    • Sec-WebSocket-Key :客户端生成的随机密钥,用于服务生成握手应答的 Sec-WebSocket-Accept
    • Sec-WebSocket-Version :指定WebSocket的版本,当前标准为13
  2. 服务器接收请求后,返回101状态码,并确认握手信息
    HTTP/1.1 101 Switching Protocals
    Upgrade :websocket
    Connection : Upgrade
    Sec-WebSocket-Accept:

    • HTTP/1.1 101 Switching Protocals : 状态行,三个部分组成
      • 协议版本 :HTTP/1.1
      • 状态码: 101
      • 状态描述:Switching Protocals是对状态码的描述,说明服务器响应内容。
    • Sec-WebSocket-Accept:由Sec-WebSocket-Key和待定算法生成的哈希,用于确认握手安全性。
2.2.2 数据帧传输

通过帧传输(帧:是客户端和服务器之间传输的数据单元)。每一帧都有固定的格式,包含数据以及控制信息,WebScoket支持以下

  • 文本帧 : 用于传输文本,通常是UTF-8编码字符串
  • 二进制帧 : 用于传输二进制数据,图片、音视频数据
  • 关闭帧 : 用于关闭连接
  • Ping和Pong :用于检测连接活跃性,ping是由客户端或服务器发送,pong由对方响应
2.2.3 保持连接与心跳

WebSocket在建立后会保持连接状态,直到一方显示关闭连接。为了防止连接由于网络问题或闲置超时而断开,WebSocket支持通过Ping-Pong机制来检查活跃性。

2.2.4连接关闭

WebSocket关闭需要双方发送一个关闭帧。关闭帧包含一个关闭码和关闭原因,可以用来表明连接关闭的原因。

常见的关闭码

  • 1000 :正常关闭
  • 1001:服务器或服务器因特殊原因
  • 1002:协议错误
  • 1003:接收不到支持的数据类型
  • 1006:异常关闭
  • 1007:收到不一致的数据帧。格式不正确
  • 1009:发送消息超过可以接收到的大小
  • 1011:服务器错误
  • 10015:握手期间失败

3、WebSocket和HTTP对比

相同点

  • 应用层协议:WebSocket和Http都属于应用层协议,数据传输
  • 基于TCP
  • 跨平台兼容
  • 使用标准URL

不同点

  • 连接模式:HTTP短连接,WebSocket长连接
  • 通讯模式:单向(请求-响应)    初始通过HTTP后建立持久连接
  • 延迟: 每次请求重新连接       一旦建立,延迟低,可实时传输数据
  • 数据格式:基于文本的请求与响应,通常JSON/HTML   数据帧,支持文本和二进制
  • 状态保持: 无状态(每个请求都是独立)         有状态(保持连接、允许持续交互)

应用场景

HTTP:静态网页加载、API、文件下载和上传、搜索引擎、内容管理系统

WebSocket:实时聊天应用、在线游戏、金融交易平台。

HTTP更适合请求-响应式交互吗,适合大多数常规数据传输要求。

WebSocket转为实时、双向的通讯而设计,适合需要快速响应和持续连接应用场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值