IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 快速了解websocket -> 正文阅读

[网络协议]快速了解websocket

欢迎大家来掘金找我玩~传送门

前言

作为一名入门不久的前端,平时接触最多的就是http/https协议了,而对websocket却不甚了解,最近看了一波资料,顺便在此做以总结~~ 欢迎大家交流指正~

http的限制

我们都知道:http是请求——返回式地与服务器进行半双工(Half-duplex)通信。

单工simplex:只允许单方向传输

半双工half-duplex:一个时间只允许单方向传输

全双工full-duplex:同时允许双向传播

当客户端有需要的数据时:

  1. 首先三次握手和服务器建立一个TCP连接
  2. 客户端向服务端发起请求
  3. 服务器接收到请求,返回请求的数据/进行相应的操作后返回操作的结果。

请思考这样的场景:
在瞬息万变的股市里,用户需要获取实时的股市信息,用http要怎么实现?

如果我们采用轮询的方式,即客户端和服务器之间持久连接,客户端每隔一段时间都要去问服务器:你的数据有没有更新呀?更新的话就发给我吧~

如果我们采用长轮询的方式,即客户端发送一个请求到服务端,问数据有没有更新,如果没有坐下来和服务端喝喝茶(不是)没有更新的话,就一直等待,直到有数据的更新返回给客户端。

让我们想想这两种方式都有什么问题?

  1. 首先共同的的问题就是:每次发送请求都会带上header,数据频繁的更新,我们频繁的发送请求,但是其实header的信息是大量重复的,很消耗流量。

  2. 对于轮询:如果数据毫米ms级的更新,我们怎么控制发请求的频率?要每毫秒都发送一次吗?这样的话很快就达到了服务器的最大连接数而导致连接关闭。

  3. 对于长轮询:如果数据毫米ms级的更新,服务器在传送给客户端一个数据包之后,必须要等下一个GET请求到来了才能继续传数据包给客户端,这样的延迟是用户不能接受的。

websocket基本了解

由此诞生了websocket,他是一个事件驱动的、全双工、数据轻量的应用层协议,同http一样:基于可靠的TCP、运作在应用层。

websoket的优势

  1. 支持双向通信,实时性强
  2. 数据轻量,WebSockets一般不使用XMLHttpRequest,因此,每次我们需要从服务器上获得更多信息时,都不会发送头信息。减少了被发送到服务器的数据负载。
  3. 单一TCP连接,在一开始升级HTTP连接后,客户端和服务器在WebSocket连接的整个生命周期内都通过该TCP连接(持久连接)进行通信

缺点

  1. 当连接终止时,websocket不会自动恢复
  2. 2011年之前浏览器版本不支持websocket

websocket 生命周期

请看下图:

可以看出一个websocket的生命周期为

  1. 首先TCP三次握手建立一个持久的连接(图中没有体现)
  2. 客户端通过http向服务器发起一个握手的请求,通过HTTP header里的Upgrade,申请协议升级,將HTTP协议更改為WebSocket协议
  3. 服务器接收到请求之后会返回response,响应协议升级
  4. 成功建立连接,可以愉快的进行全双工的通信啦~

以下来自请求头是我在b站爬的

Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:2L8u5Rrk5YN0wKvZM1Ii4g==
Sec-WebSocket-Version:13

其中:

UpgradeConnection将http协议更改为websocket协议

Sec-WebSocket-*系列中的Sec-WebSocket-Version表示了此次使用的websocket版本,一般都是13

以下响应头也是我在b站爬的

Connection:upgrade
Sec-WebSocket-Accept:/3LmuSOurCAPdn7LO9JdRkeheEk=
Upgrade:websocket

表示服务器已经成功接收到请求,websocket连接已经成功建立啦~

websocket使用场景

在一些需要实时获取数据的场景,比如股市、直播、实时聊天、共享文档、实时地图等场景里使用。

在实际应用上

在实时场景上,其他用户如何获得某用户更新的数据呢?

可以看出,用户更新的数据其实是先提交到websocket server上,然后再由websocket server通过广播的形势把一个用户提交的数据派发到其他客户端。

总结

简单做一下总结,本文从whywhathow几个维度阐述了websocket的一些基础入门知识。其实还有很多实战的东西没有讲,后续还会继续更新~

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:59:21  更:2022-05-18 17:59:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:41:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码