一文了解什么是WebSocket

WebSocket 允许我们创建“实时”应用程序,与传统 API 协议相比,该应用程序速度更快且开销更少。​

一、WebSocket 是如何工作的

按照传统的定义,WebSocket是一种双工协议,主要用于客户端-服务器通信通道。它本质上是双向的,这意味着通信在客户端与服务器之间来回发生。 

使用 WebSocket 开发的连接只要任何参与方中断连接就会持续存在。一旦一方断开连接,另一方将无法进行通信,因为连接会在其前面自动断开。

WebSocket需要HTTP的支持来发起连接。说到它的实用性,当涉及到数据的无缝流和各种不同步流量时,它是现代 Web 应用程序开发的支柱。 

二、为什么需要 Web Socket 以及何时应该避免使用 Web Socket

WebSocket 是一种重要的客户端-服务器通信工具,人们需要充分了解其实用性并避免使用其最大潜力的场景。

在以下情况下使用 WebSocket:

‍ 1.开发实时网络应用程序 

WebSocket 最常见的用途是实时应用程序开发,其中它有助于在客户端连续显示数据。当后端服务器不断发回这些数据时,WebSocket 允许在已经打开的连接中不间断地推送或传输这些数据。WebSocket 的使用使此类数据传输变得快速并充分利用了应用程序的性能。 

此类 WebSocket 实用程序的一个现实示例是比特币交易网站。在这里,WebSocket 协助部署的后端服务器向客户端发送数据处理。

‍ 2.创建聊天应用程序 

聊天应用程序开发人员在一次性交换和发布/广播消息等操作中向 WebSocket 寻求帮助。由于使用相同的 WebSocket 连接来发送/接收消息,因此通信变得简单快捷。

‍ 3.正在开发游戏应用程序

在游戏应用程序开发过程中,服务器必须不间断地接收数据,而不要求 UI 刷新。WebSocket 可以在不影响游戏应用程序 UI 的情况下实现这一目标。

既然已经清楚了应该在哪里使用 WebSocket,请不要忘记了解应该避免使用 WebSocket 的情况,让自己远离大量的操作麻烦。

当需要获取旧数据或仅需要一次性处理数据时,不应该使用 WebSocket。在这些情况下,使用 HTTP 协议是明智的选择。

三、WebSocket 与 HTTP

由于 HTTP 和 WebSocket 都用于应用程序通信,因此人们经常感到困惑,并且很难从这两者中选择一个。看一下下面提到的文本,可以更清楚地了解 HTTP 和 WebSocket。

如前所述,WebSocket 是一种框架式双向协议。相反,HTTP 是一个在 TCP 协议之上运行的单向协议。

由于WebSocket协议能够支持连续的数据传输,因此主要用于实时应用程序开发。HTTP 是无状态的,用于开发RESTful和 SOAP 应用程序。Soap仍然可以使用HTTP来实现,但是REST被广泛传播和使用。

在 WebSocket 中,通信发生在两端,这使其成为更快的协议。在 HTTP 中,连接是在一端建立的,这使得它比 WebSocket 有点慢。

WebSocket使用统一的TCP连接,需要一方终止连接。在发生这种情况之前,连接将保持活动状态。HTTP 需要为单独的请求构建不同的连接。请求完成后,连接会自动断开。 

四、WebSocket 连接是如何建立的

该过程从WebSocket 握手开始,涉及使用新方案 ws 或 wss。为了快速理解,您可以将它们分别视为 HTTP 和安全 HTTP (HTTPS)。

使用此方案,服务器和客户端应遵循标准 WebSocket 连接协议。WebSocket 连接建立从 HTTP 请求升级开始,该请求具有几个标头,例如 Connection: Upgrade、Upgrade: WebSocket、Sec-WebSocket- Key 等。 

以下是建立此连接的方式:

1.请求

连接:升级标头 表示 WebSocket 握手,而Sec-WebSocket-Key具有 Base64 编码的随机值。该值是在每次 WebSocket 握手期间任意生成的。除了上述内容之外,密钥标头也是该请求的一部分。

2.响应

响应标头Sec-WebSocket-Accept具有Sec-WebSocket-Key请求标头中提交的值的热情。这与特定的协议规范相关,并被广泛用于防止误导性信息。换句话说,它增强了 API 安全性并阻止配置不当的服务器在应用程序开发中造成错误。 

五、WebSocket协议

WebSocket 协议是一种框架协议,涉及每个数据的各种离散卡盘。它还部署帧类型、数据部分和有效负载长度以确保正常运行。要详细了解 WebSocket 协议,了解其构建模块至关重要。下面提到了最重要的部分。

Fin Bit是 WebSocket 的基本位。当开始连接时它将自动生成。 

‍ RSV1 、RSV2、RSV3 位是为进一步的机会保留的位。 

操作码是每个帧的一部分,解释解释特定帧的有效负载数据的过程。一些常见的操作码值为 0x00、0x0、0x02、0x0a、0x08 等。 

当一位设置为 1 时, 掩码位激活。

WebSocket 要求对所有有效负载数据使用客户端选择的随机密钥。屏蔽密钥与有效负载数据结合时,有助于 XOR 操作中的有效负载数据共享。这样做对于应用程序API 安全性非常重要,因为屏蔽可以防止缓存误解或缓存中毒。 

现在让我们详细了解其关键组成部分:

有效负载长度

这用于 WebSocket 中有效负载数据的总长度编码。当编码数据长度小于126字节时,显示Payload len。一旦有效负载数据长度超过 126 字节,就会使用附加字段来描述有效负载长度。 

掩蔽键

客户端发送到服务器的每个帧都用 32 位值进行掩码。当掩码位为 1 时,显示掩码键。如果掩码位为 0,则掩码键为零。 

有效载荷数据

各种任意应用数据和扩展数据被称为有效负载数据。客户端和服务器使用此数据进行协商,并用于早期的 WebSocket 握手。 

六、结论

WebSocket 支持客户端和服务器之间的双向交互式通信会话,而无需轮询服务器以获得答复,从而提供了比其他协议更高的速度和实际功能。但与所有应用程序一样,使用 WebSocket 需要仔细的编程实践和运行时保护,以防范一组独特的威胁。与传统方法相比,这种 API 深度防御策略将改善对用户和组织的保护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud之Docker的学习【详细】

目录 Docker 项目部署问题 总结 镜像与容器 Docker的安装 Docker基本操作 镜像相关命令 拉取镜像 镜像保存 删除镜像 镜像加载 容器相关命令 删除容器 数据卷 数据卷命令 数据挂载 自定义镜像 Dockerfile 案例 Docker-Compose Compose文件 Docker-Compos…

Termux SFTP如何实现远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

CN考研真题知识点二轮归纳(3)

持续更新,上期目录: CN考研真题知识点二轮归纳(2)https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称:传输控制协议/网络协议,是一个协议族,主…

数学知识:求组合数

求组合数 I&#xff1a; 注意&#xff1a;1~1w组数据 #include<iostream> using namespace std;const int mod 1e97; long long f[2010][2010];int main() {int n;scanf("%d",&n);//预处理for(int i0;i<2000;i){for(int j0;j<i;j){if(!j) f[i][j]…

力扣每日一题80:删除有序数组中的重复项||

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

管网智慧化建设能为管网提供哪些优势?第3点特别值得注意!

关键词&#xff1a;智能管网、智慧管网、智慧管网建设、智慧燃气、气管网压力监测解决方案 随着信息技术的不断发展&#xff0c;数字城市的发展正在快速向智慧城市推进&#xff0c;而管网智慧化建设是目前智慧城市建设中不可或缺的一个重要举措。 因为早期铺设使用的排水管道…

MathType2024破解版激活序列号

MathType序列号是一款针对该软件而制作的激活工具&#xff0c;大家都知道这款软件在官方是需要花钱购买的&#xff0c;不然得话就只能试用。有很多功能都无法正常使用&#xff01;而本序列号却可以完美的解决这一难题&#xff0c;因为它可以破解并激活“MathType”&#xff0c;…

Android WMS——Dialog和Toast窗口创建(五)

前面文章介绍了 Activity 窗口创建的流程,这里我们在看一下 Dialog 和 Toast 窗口创建的流程。 一、Dialog窗口创建 Dialog 中创建 Window 是在其构造方法中完成。 1、Dialog显示 源码位置:/frameworks/base/core/java/android/app/Dialog.java private final WindowMana…

java实现下载文件压缩包

业务背景&#xff1a; 在开发过程中&#xff0c;我们会遇到需要对文件&#xff08;单个或多个&#xff09;进行压缩并下载的功能需求&#xff0c;这里记录一下压缩多个文件的实现过程&#xff0c;或许有更好的方式请大家补充 前端实现一个按钮调下载压缩包的接口 <button…

jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

MySQL篇---第十篇

系列文章目录 文章目录 系列文章目录一、说说悲观锁和乐观锁二、怎样尽量避免死锁的出现?三、使用 MySQL 的索引应该注意些什么?一、说说悲观锁和乐观锁 悲观锁 说的是数据库被外界(包括本系统当前的其他事物以及来自外部系统的事务处理)修改保持着保守 态度,因此在整个数…

230 - Borrowers (UVA)

题目链接如下&#xff1a; Online Judge 代码如下&#xff1a; #include <iostream> #include <string> #include <algorithm> #include <vector> #include <map> // #define debugstruct book{std::string title;std::string author;bool is…

一条 SQL 是如何在 MyBatis 中执行的

前言 MyBatis 执行 SQL 的核心接口为 SqlSession 接口&#xff0c;该接口提供了一些 CURD 及控制事务的方法&#xff0c;另外还可以通过 SqlSession 先获取 Mapper 接口的实例&#xff0c;然后通过 Mapper 接口执行 SQL&#xff0c;Mapper 接口方法的执行最终还是委托到 SqlSe…

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接&#xff0c;在正式开始学习前&#xff0c;先把本节的思维导图引入&#xff1a; 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

数字时代新趋势:TikTok算法与海外网红营销的融合策略

在当今数字化时代&#xff0c;社交媒体已经成为品牌推广和市场营销的重要渠道。TikTok作为全球范围内最受欢迎的短视频平台之一&#xff0c;以其独特的算法和用户参与度&#xff0c;正日益成为海外网红营销的热门选择。本文Nox聚星将和大家探讨TikTok算法和海外网红营销之间的融…

全平台七合一万能DIY小程序源码系统 带完整搭建教程

近年来互联网技术的飞速发展&#xff0c;尤其是移动互联网的普及。随着微信、支付宝、百度、抖音、头条等平台的迅速崛起&#xff0c;小程序成为了这些平台上重要的应用形态。这些小程序的应用范围广泛&#xff0c;包括电商、教育、娱乐、生活服务等各个领域。然而&#xff0c;…

【二叉树经典题目】

根据二叉树创建字符串 本题的关键在于什么情况要省略括号&#xff0c;什么情况不能省略&#xff1a; 左右为空可以省略括号 左不为空&#xff0c;右为空可以省略括号左为空,右不为空不能省略括号 class Solution { public://1.左右为空可以省略括号//2.左不为空&#xff0c;右…

基于SSM的高校疫情防控出入信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

提高微星笔记本Linux下散热性能,MSI-EC 驱动新补丁发布

导读近日消息&#xff0c;今年早些时候&#xff0c;Linux 6.4 中添加了 MSI-EC 驱动程序&#xff0c;允许对 Linux 系统微星笔记本电脑进行更多控制。 MSI-EC 驱动程序近日迎来新补丁&#xff0c;为微星笔记本带来 Cooler Boost 功能。该功能允许提高笔记本电脑的风扇转速&…

Uniapp中嵌入H5( uniapp开发的H5),并且在H5中跳转到APP的指定页面

原生H5跳转uniapp开发的app方式&#xff1a; 1.在APP中使用web-view嵌入H5页面使用web-view组件实现 <template><view><web-view src"https://uniapp.dcloud.net.cn/component/web-view.html"></web-view></view> </template>…