详解HTTP:有了HTTP,为何需要WebSocket?
在日常生活中,HTTP 常用于请求数据。例如,当你打开一个天气预报网站时,浏览器会发送一个 HTTP 请求到服务器,请求当前的天气数据,服务器返回响应,浏览器解析并显示这些数据。
但是,当涉及到需要服务器主动推送消息的场景时,HTTP 就显得力不从心了。比如,当你在使用一个在线聊天应用时,HTTP 不能高效地实现实时消息推送。如果使用 HTTP 来实现这个功能,你的浏览器需要不断地发送请求去询问服务器是否有新消息(这叫做轮询)。这不仅会增加网络流量和服务器负担,还会导致消息传递的延迟,影响用户体验。
相比之下,WebSocket 就非常适合这种场景。它允许服务器和客户端之间建立一个持久连接,服务器可以实时地将新消息推送给客户端,而客户端也可以随时向服务器发送消息。这就避免了 HTTP 轮询的缺点,实现了高效的实时通信。
HTTP 的局限性
1. 客户端主动请求
HTTP 协议是一个请求-响应模式,客户端发起请求,服务器返回响应。服务器不会主动向客户端发送数据,必须等待客户端的请求。这种模式对于静态页面或者数据不频繁变化的场景非常合适,但对于需要实时数据更新的场景,如在线游戏、实时聊天等,就显得效率低下。
2. 定时轮询与长轮询
为了在用户无操作的情况下实现数据更新,前端可以采用定时轮询或者长轮询:
-
定时轮询:前端定时发起 HTTP 请求,服务器返回当前数据状态。虽然实现简单,但频繁的 HTTP 请求会消耗带宽并增加服务器负担,同时可能导致明显的延迟。
-
长轮询:前端发起一个超时较长的 HTTP 请求,服务器在有数据更新时才返回响应。如果超时则重新发起请求。这减少了请求次数,提高了响应速度,但仍然是客户端主动发起请求的方式。
尽管这些方法在一定程度上缓解了 HTTP 的局限性,但本质上仍是客户端主动请求,不适合需要频繁数据更新的场景。
WebSocket 的优势
1. 全双工通信
WebSocket 是基于 TCP 的新协议,支持全双工通信,允许客户端和服务器同时发送和接收数据。这与 HTTP 的半双工通信(单向请求-响应)有本质区别。全双工通信使得 WebSocket 特别适合需要频繁数据交换的应用场景。
2. 高效的数据传输
WebSocket 连接建立后,数据以帧(frame)的形式在客户端和服务器之间传输。WebSocket 数据帧格式中包含操作码(opcode)和负载数据(payload),这使得数据传输更加高效。相比于 HTTP 每次请求都包含完整的头部信息,WebSocket 减少了传输开销,提升了传输效率。
3. 持久连接
WebSocket 连接一旦建立,保持连接状态直到显式关闭。相比 HTTP 每次请求都需要重新建立连接,WebSocket 的持久连接大大减少了连接建立和关闭的开销,适合需要长时间数据传输的场景。
WebSocket 的应用场景
1. 实时通信
WebSocket 广泛应用于实时聊天应用、实时协作工具(如飞书、Slack 等),确保消息能够实时传递和接收,提升用户体验。
2. 在线游戏
在网页游戏中,服务器需要频繁向客户端推送游戏状态更新,例如怪物的移动、攻击等。使用 WebSocket,可以保证这些数据及时传输,确保游戏流畅运行。
3. 实时数据更新
金融交易平台、体育赛事直播等场景,需要实时更新数据,WebSocket 提供了一个高效的解决方案,能够迅速推送最新数据到客户端。
WebSocket 与 HTTP 的关系
WebSocket 与 HTTP 虽然同样基于 TCP,但两者是不同的协议。WebSocket 在连接建立时,使用 HTTP 发起协议升级请求(Connection: Upgrade 和 Upgrade: WebSocket),服务器响应 101 Switching Protocols 状态码完成协议升级。升级完成后,WebSocket 与 HTTP 便没有关系了,之后的通信完全使用 WebSocket 协议。
这种协议升级机制使得 WebSocket 能够兼容现有的 HTTP 基础设施,并且能够利用浏览器对 HTTP 协议的支持,实现无缝切换。
总结
尽管 HTTP 在网页浏览中无处不在,但其半双工通信模式和请求-响应机制在需要频繁数据更新和实时交互的场景中显得不足。WebSocket 通过支持全双工通信、高效的数据传输和持久连接,弥补了 HTTP 的这些不足,成为实时应用不可或缺的技术。
因此,WebSocket 的出现并不是要取代 HTTP,而是作为一种补充,解决了 HTTP 在实时数据传输场景中的不足。WebSocket 的高效性和实时性,使得它在需要频繁交互的应用中,发挥了重要作用。
相关文章:
详解HTTP:有了HTTP,为何需要WebSocket?
在日常生活中,HTTP 常用于请求数据。例如,当你打开一个天气预报网站时,浏览器会发送一个 HTTP 请求到服务器,请求当前的天气数据,服务器返回响应,浏览器解析并显示这些数据。 但是,当涉及到需要…...
Spring Boot 启动流程是怎么样的
引言 SpringBoot是一个广泛使用的Java框架,旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中,我们将深入探讨SpringBoot应用程序的启动流程,了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…...
【学习笔记】数据结构(三)
栈和队列 文章目录 栈和队列3.1 栈 - Stack3.1.1 抽象数据类型栈的定义3.1.2 栈的表示和实现 3.2 栈的应用举例3.2.1 数制转换3.2.2 括号匹配的检验3.2.3 迷宫求解3.2.4 表达式求值 - 波兰、逆波兰3.2.5 反转一个字符串或者反转一个链表 3.3 栈与递归的实现3.4 队列 - Queue3.4…...
学习python笔记:10,requests,enumerate,numpy.array
requests库,用于发送 HTTP 请求的 Python 库。 requests 是一个用于发送 HTTP 请求的 Python 库。它使得发送 HTTP 请求变得简单且人性化。以下是一些基本的 requests 函数及其用途: requests.get(url, **kwargs) 发送一个 GET 请求到指定的 URL。 i…...
经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)
经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月,ChatGPT 成功面世,成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同,OpenAI 从初代模型 GPT-1 开始,始终贯彻只有解码器࿰…...
MySQL库与表的操作
目录 一、登录并进入数据库 1、登录 2、USE 命令 检查当前数据库 二、库的操作 1、创建数据库语法 2、举例演示 3、退出 三、字符集和校对规则 1、字符集(Character Set) 2、校对集(Collation) 总结 3、操作命令 …...
TTS 语音合成技术学习
TTS 语音合成技术 TTS(Text-to-Speech,文字转语音)技术是一种能够将文字内容转换为自然语音的技术。通过 TTS,机器可以“说话”,这大大增强了人与机器之间的互动能力。无论是在语音助手、导航系统还是电子书朗读器中&…...
小公司做自动化的困境
1. 人员数量不够 非常常见的场景, 开发没几个, 凭什么测试要那么多, 假设这里面有3个测试, 是不是得有1个人会搞框架? 是不是得有2人搞功能测试, 一个人又搞框架, 有些脚本, 真来得及吗? 2. 人员基础不够 现在有的大公司, 是这样子协作的, 也就是某模块需求谁谁测试的, 那么…...
基于pytorch框架的手写数字识别(保姆级教学)
1、前言 本文基于PyTorch框架,采用CNN卷积神经网络实现MNIST手写数字识别,不仅可以在GPU上,同时也可以在CPU上运行。方便即使只有CPU的小伙伴也可以运行该模型。本博客手把手教学,如何手写网络层(3层),以及模型训练,详细介绍各参数含义与用途。 2、模型源码解读 该模型…...
注意力机制在大语言模型中的应用
在大语言模型中,注意力机制(Attention Mechanism)用于捕获输入序列中不同标记(token)之间的关系和依赖性。这种机制可以动态地调整每个标记对当前处理任务的重要性,从而提高模型的性能。具体来说࿰…...
qt 实现对字体高亮处理原理
在Qt中实现对文本的字体高亮处理,通常涉及到使用QTextDocument、QTextCharFormat和QSyntaxHighlighter。下面是一个简单的例子,演示如何为一个文本编辑器(假设是QTextEdit)添加简单的关键词高亮功能: 步骤 1: 定义关键…...
SAP中通过财务科目确定分析功能来定位解决BILLING问题实例
接用户反馈,一笔销售订单做发货后做销售发票时,没有成功过账到财务,提示财户确定错误。 这个之前可以通过VF02中点击小绿旗来重新执行过财动作,看看有没有相应日志来定位问题。本次尝试用此方法,也没有找到相关线索。 …...
充电站,正在杀死加油站
最近,深圳公布了一组数据,深圳的超级充电站数量已超过传统加油站数量,充电枪数量也已超过加油枪数量。 从全国范围看,加油站关停的速度在加快。 充电站正在杀死加油站。 加油站,未来何去何从? 01. 减少 我…...
哪个牌子的超声波清洗机好?四样超卓超声波清洗机独具特色!
眼镜是许多人日常生活中必不可少的工具,然而,相信很多人都有过清洗眼镜的烦恼。传统的清洗眼镜的方法往往不够彻底,容易留下污渍或者划伤镜片。因此,超声波洗眼镜机成为了现代人清洗眼镜的新选择。超声波洗眼镜机通过利用超声波震…...
vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则
比如以下内容: 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…...
Docker-Compose一键部署项目
Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…...
【C++】相机标定源码笔记-线激光点云处理工具类
一个线激光点云处理工具类,它包含了一系列的方法用于处理和分析线激光扫描得到的点云数据。提供的功能包括: 通过文件或直接数据设置点云。计算线激光在机器人坐标系下的精度,输出内点的平均距离、最大距离、最小距离、总点数和内点数。提供了…...
解决Transformer根本缺陷,所有大模型都能获得巨大改进
即使最强大的 LLM 也难以通过 token 索引来关注句子等概念,现在有办法了。 最近两天,马斯克和 LeCun 的口水战妥妥成为大家的看点。这两位 AI 圈的名人你来我往,在推特(现为 X)上相互拆对方台。 LeCun 在宣传自家最新论…...
如何排查Java应用的死锁
排查Java应用中的死锁问题是一个复杂但重要的任务,因为死锁会导致应用程序停止响应,影响用户体验和系统稳定性。以下是一些方法和步骤,帮助你排查Java应用中的死锁。 1. 理解死锁的概念 在计算机科学中,死锁是指两个或多个线程相…...
JS面试题1
1. 延迟加载JS有哪些方式? defer: 等html全部解析完成,才会执行js代码,顺次执行js脚本 async:是和html解析同步的,不是顺次执行js脚本(当有很多个js时),是谁先加载完谁先执行。 <…...
Linux网络 - 再谈、详谈UDP和TCP协议
文章目录 前言预备netstatpidofcat /etc/services 一、UDP协议UDP协议端格式UDP的缓冲区基于UDP的应用层协议 二、TCP协议1.TCP协议段格式确认应答(ACK)机制三次握手疑问1 最后一次客户端发给服务端的ACK请求怎么保证服务端能够收到? 四次挥手疑问2 为什么挥手是四次…...
el-form重置后input无法输入问题
新增用户遇到的问题: 如果你没有为 formData 设置默认值,而只是将其初始化为空对象 {},则在打开dialog时,正常输入, formdata会变成如下 但是,打开后,直接使用 resetFields 或直接清空表单&…...
Java网络编程(JavaWeb的基础)
Java网络编程(JavaWeb的基础) 文章目录 Java网络编程(JavaWeb的基础)前言一、网络编程概述1.1 软件架构&网络基础1.2 网络通信要素:IP/端口/通信协议1.3 传输层协议:tcp/udp 二、网络编程API2.1 InetAddress类2.2 Socket类&am…...
鸿蒙Harmony开发实战案例:使用OpenGL绘制3D图形
XComponent控件常用于相机预览流的显示和游戏画面的绘制,在OpenHarmony上,可以配合Native Window创建OpenGL开发环境,并最终将OpenGL绘制的图形显示到XComponent控件。本文将采用"Native C"模板,调用OpenGL ES图形库绘制3D图形&…...
DM达梦数据库存储过程
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...
【python】OpenCV—Color Correction
文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础(18)使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…...
Java基础知识整理笔记
目录 1.关于Java概念 1.1 谈谈对Java的理解? 1.2 Java的基础数据类型? 1.3 关于面向对象的设计理解 1.3.1 面向对象的特性有哪些? 1.3.2 重写和重载的区别? 1.3.3 面向对象的设计原则是什么? 1.4 关于变量与方…...
知识图谱——Neo4j数据库实战
数据与代码链接见文末 1.Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量...
第十一次Javaweb作业
4.登录校验 4.1会话 --用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求…...
人工智能AI风口已开:如何赋予UI设计与视频剪辑新生命
随着科技的浪潮不断向前推进,人工智能(AI)正以惊人的速度重塑着我们的世界,特别是在创意产业的核心领域——UI设计与视频剪辑中,AI正逐步成为驱动行业创新与变革的关键力量。在这个AI技术全面开花的新时代,…...
织梦网站搜索怎么做/百度认证官网
常见Python爬虫工具总结 前言 以前写爬虫都是用requests包,虽然很好用,不过还是要封装一些header啊什么的,也没有用过无头浏览器,今天偶然接触了一下。 原因是在处理一个错误的时候,用到了几个以前没有用过的工具&…...
网站后端用什么软件做/建设网站的网站首页
原因:一个测试环境,nginxphp-fpm对外提供服务,测试人员访问的时候出现时快时慢的情况,慢时超过了正常网页的等待打开时间范围。重启nginx php-fpm后恢复,访问几次后又会慢查找思路:1,系统负载&a…...
不更新网站如何做排名/人力资源短期培训班
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这是自己打的,为什么这个能显示出来,有什么区别package uio;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class Text1 {public…...
单位做网站注意什么/发表文章的平台有哪些
三面大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了(呜呜呜)。回来之后把这些题目做了一个分类并整理出答案(强迫症的我狂补知识)分为软件测试基础、Python自动化…...
建设门户网站费用/公司营销网站建设
1. 远程连接linux(用Xshell) ssh 用户名服务器的ip ssh s18192.168.235.128 普通用户登录后系统的提示符:$ root用户登录后系统的提示符:# ssh rootip -p port 制定端口号 exit 退出用户登录 2. 查看服务器ip地址 ip addr ifconfig ens33: 网卡名3. 盘符…...
wordpress 会员插件/广州百度竞价外包
Mac OS X - 重置 MySQL Root 密码您是否忘记了Mac OS 的MySQL的root密码? 通过以下4步就可重新设置新密码:1. 停止 mysql server. 通常是在 ‘系统偏好设置‘ > MySQL > ‘Stop MySQL Server‘2. 打开终端,输入:sudo /usr/local/my…...