有了HTTP协议,为什么还要有WebSocket

HTTP的缺陷

现在的应用场景可能更多的是,前端发起一次HTTP请求,服务器后端返回一次HTTP响应。但是有这样的场景,是需要服务器主动给前端发送请求的。
最常见的场景是扫码登陆。
这里有两种解决方案,一种是微信的解决方案,前端代码每隔一两秒就发送一个HTTP请求给服务器,这样服务器就能返回响应消息了。想一想是不是登陆微信扫码有时候会感觉卡了一两秒才登录,这是因为电脑登陆二维码出现后,手机扫了它,然后电脑隔一两秒发送一个询问给服务器,问这个二维码被扫了没有。
但是这个缺点非常明显,会不停的发送请求,这占用了带宽;即使一两秒可能有的人还是觉得卡不满意。
另一种是百度网盘的解决方案,叫长轮询。我们知道一般HTTP请求发出后,会给服务器留一定时间做响应,假设这个时间设置的比较长,比如30s,那服务器只要在30s内受到了扫码请求都可以立即返回给客户端。假设超时还没有返回,那就立马发起下一次请求。这样可以减少http请求数量。
这两种方式本质上还是客户端主动获取数据,扫码可能还好,假设是游戏的话,数据量非常庞大,那就没法主动推送给客户端了吗?实际上是有的,那就是WebSocket

全双工与半双工

TCP连接的两端,同一时间里,双方都可以主动向对方发送数据。这就是所谓的全双工。

而现在使用最广泛的HTTP/1.1,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工。

也就是说,好好的全双工 TCP,被 HTTP/1.1 用成了半双工。

这是由于 HTTP 协议设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,根本就没考虑网页游戏这种,客户端和服务器之间都要互相主动发大量数据的场景。

所以,为了更好的支持这样的场景,我们需要另外一个基于TCP的新协议。

于是新的应用层协议WebSocket就被设计出来了。

大家别被这个名字给带偏了。虽然名字带了个socket,但其实 socket 和 WebSocket 之间,就跟雷峰和雷峰塔一样,二者接近毫无关系。

在这里插入图片描述

怎么建立WebSocket连接

还是得先tcp三次握手,然后用http先进行一次通信,这里假设客户端想建立WebSocket连接,就可以在请求头里带上一些特殊字段:
在这里插入图片描述
在这里插入图片描述
返回字段101是指协议切换

WebSocket的使用场景

WebSocket完美继承了 TCP 协议的全双工能力,并且还贴心的提供了解决粘包的方案。

它适用于需要服务器和客户端(浏览器)频繁交互的大部分场景,比如网页/小程序游戏,网页聊天室,以及一些类似飞书这样的网页协同办公软件。

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

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

相关文章

Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1

Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1 新接手了一个项目,导入到idea后,maven标签中页点击Reload All Maven Projects,报Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1错…

YOLOv5算法进阶改进(19)— 在主干网络中引入SAConv | 轻量化的可切换空洞卷积

前言:Hello大家好,我是小哥谈。Switchable Atrous Convolution(SAC)是一种用于图像处理和计算机视觉任务的卷积神经网络(CNN)操作。它是在传统的空洞卷积的基础上进行改进的。传统的空洞卷积是一种通过在卷积核中引入空洞(或称为膨胀率)来扩大感受野的技术。然而,传统…

网络学习:Vlan基础知识、划分思路及其优越性

目录 一、VLAN基础知识 二、VLAN的划分方法 1. 基于端口划分的VLAN 2. 基于MAC地址划分VLAN 3. 基于网络层协议划分VLAN 4. 根据IP组播划分VLAN 5. 按策略划分VLAN 6. 按用户定义、非用户授权划分VLAN 三、VLAN的优越性 1. 增加了网络连接的灵活性 2. 控制网络上的广…

GStreamer管道播放建立

1 mediainfo工具获取媒体的基本信息 1.1 封装形式(别被文件后缀迷惑,有些mp4封装,可能是ts等等) TS封装:/home/firefly# mediainfo /home/firefly/LG_Colors-of-Journey-HDR.mp4 General ID : 1 (0x1) Complete name …

企业信息化转型之企业统一门户搭建

一、当前企业门户实施的背景和痛点 企业随着公司业务的发展,公司运作的复杂度在不断加大,各部门的业务量和业务的复杂度都在不断增加,已经建设了ERP、HR、OA、考勤、合同、BPM、PLM等有效地支撑了过去和现有业务的发展。 企业在信息化办公是…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计,感谢各位师傅的关注!网安之路漫长,与君共勉! Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台,支持文章管理、…

暖通空调HVAC软件行业调研报告

本文调研和分析全球暖通空调HVAC软件发展现状及未来趋势,核心内容如下: (1)全球市场暖通空调HVAC软件总体规模,按收入进行了统计分析,历史数据2019-2023年,预测数据2024至2030年。 (…

Nginx和Ribbon实现负载均衡的区别

Nginx和Ribbon的区别 1. Nginx服务器端负载均衡: 1、Nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。即请求有nginx服务器端进行转发。 3、Nginx是服务端的负载均衡,Ribbon是客户端…

shell变量引用

在 Bash 中,如果你想让一个变量引用或“指向”另一个变量(数组),你可以使用间接引用的概念。对于你的场景,你可以将变量 a 设为数组名 eb2_info 的字符串值,然后在需要引用数组时使用间接引用。 #!/bin/ba…

(开源项目)OpenHarmony、社区共建Sample合入要求

1.新增Sample功能不能重复于当前已有Sample的功能; 2.新增Sample的工程推荐使用ArkTS语言编写; 3.新增Sample的工程推荐使用Stage模型编写; 4.新增Sample的工程中需要包含UI自动化用例(ohosTest工程模块)&#xff0…

postgres12安装postgis

文章目录 OpenEulr 23.03 x86_64依赖安装 centos7.6 x86_64依赖安装 给postgres 12安装postgis。 postgres 12支持的postgis版本为:(检查postgis POSTGIS_PGSQL_VERSION) postgis>2.5 OpenEulr 23.03 x86_64 依赖 postgis-3.4.2依赖:(yum源安装的版本及postgis…

小众二手跨境电商平台——Depop新手卖家指南

对标美国的二手跨境电商平台Mercari和Poshmark以及东南亚的Etsy,Depop是英国的一个独特的创意时尚交易平台。它与Instagram相似,但它更倾向于交易二手衣物、饰品以及艺术作品。这个相对细分的电子商务平台Depop也吸引了很多跨境人。今天就给大家分享如何…

AM和FM是啥意思?有啥区别?

同学们大家好,今天我们继续学习杨欣的《电子设计从零开始》,这本书从基本原理出发,知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例,可以说是全面系统地介绍了电子设计所需的知识…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)

摘要:在物流和制造业中,开发一套高效的条形码与二维码识别系统显得尤为关键。本博文深入探讨了如何利用深度学习技术打造出一套先进的条形码及二维码检测系统,并且提供了一套完整的实施方案。该系统搭载了性能卓越的YOLOv8算法,并…

面试题:从输入网址到页面显示的全过程(超详细解析)

面试题:从输入网址到页面显示的全过程 01. 要看到一个网页,我们需要什么? 我们现在经常使用的网页其实是由三种语言书写而来的:HTML、Css 和 JavaScript,它们分别负责网页的结构、网页的样式和网页的交互功能&#xf…

【C#语言入门】17. 事件详解(上)

【C#语言入门】17. 事件详解(上) 一、初步了解事件 定义:单词Event,译为“事件” 通顺的解释就是**“能够发生的什么事情”**,例如,“苹果”不能发生,但是“公司上市”这件事能发生。在C#中事…

睿尔曼超轻量仿人机械臂之ROS与Linux的关系及简单介绍

ROS是Linux的发行版本。ROS全称Robot Operating System,译为机器人操作系统;它基于Linux内核,只能在Linux下运行。ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间…

安卓 Kotlin 面试

🔥 1、请简述什么是 Kotlin?它有哪些特性?🔥 kotlin和java一样也是一门jvm语言最后的编译结果都是.class文件,并且可以通过kotlin的.class文件反编译回去java代码,并且封装了许多语法糖,其中我在项目中常用的特性:扩展…

基于springboot+vue实现校企合作项目管理系统项目【项目源码+论文说明】

基于springboot实现校企合作项目管理系统演示 摘要 这是一个计算机的时代,在计算机应用非常广泛的时代中,用计算机来完成对信息的处理有着非常好的使用效果。特别是针对学校而言亦是如此,通过在学校中的信息化建设,能够很好的提升…

1.1计算机系统构成及硬件系统知识(下)

1、定点数与浮点数 定点整数的小数点在最低有效数位之后,也就是00000000.; 因为定点整数只表示整数,不涉及小数; 定点小数的小数点在符号位之后,也就是最高有效数位之前,也就是0.0000000; 浮点…