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

news2024/12/23 22:06:14

目录

WebSocket是什么?

WebSocket怎样建立连接?

WebSocket的实际用途

WebSocket 与 HTTP 的选择


HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信

通常,打开某个网页,我们每点击一次网页上的某个选项,前端就会发送一次HTTP请求,网站返回一次HTTP响应。这种由客户端主动请求,服务器响应的方式满足大部分网页的功能场景。但这种情况下,服务器不会主动给客户端发消息。而类似网页游戏这样的场景,是需要客户端和服务器之间互相主动发大量数据的。

因此,我们需要一个基于TCP的新协议,即新的应用层协议WebSocket。

WebSocket是什么?

WebSocket 是一种用于在单个 TCP 连接上进行全双工通信的网络协议。它使用类似于 HTTP 的握手来建立连接,然后使用单独的持久连接来进行通信。这种方式使得 WebSocket 可以在浏览器和服务器之间进行实时通信,而不需要多次发送 HTTP 请求来获取数据。这意味着连接是持久的,它一直保持打开,直到有一方主动关闭连接。这使得 WebSocket 非常适合用于实时应用程序,因为它不需要不断地建立和关闭连接。

WebSocket怎样建立连接?

WebSocket 连接通常在客户端(例如浏览器)和服务器之间建立。客户端发送一个 HTTP 请求来建立连接,然后服务器返回一个确认消息,表示已建立连接。之后,客户端和服务器可以通过这个连接进行双向通信。客户端可以向服务器发送消息,服务器也可以向客户端发送消息。消息可以是任意的字节数组,并且可以使用任意的格式进行编码。

建立websocket连接

WebSocket 是一种必不可少的客户端—服务器通信工具,需要充分了解其实用性并避免使用场景才能从其最大潜力中获益。

WebSocket的实际用途

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

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

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

从上述几个示例中,我们大概知道了在什么情况下不太适合使用,例如数据交互周期很长,甚至几小时一次的情况或只需要一次性处理数据时,不应采用 WebSocket协议。在这些情况下,使用 HTTP 协议是一个明智的选择。由于 HTTP 和 WebSocket 都用于应用程序通信,因此人们常常感到困惑,很难从这两者中选择一个。

WebSocket 与 HTTP 的选择

WebSocket 是一种框架双向协议。与此相反,HTTP 是一种单向协议,作用于 TCP 协议之上。由于WebSocket协议能够支持不间断的数据传输,因此主要用于实时应用程序开发。HTTP 是无状态的,用于开发RESTful和 SOAP 应用程序。SOAP 仍然可以使用 HTTP 来实现,但是 REST 被广泛传播和使用。

在 WebSocket 中,通信发生在两端,这使其成为更快的协议。在 HTTP 中,连接是在一端建立的,这使得它比 WebSocket 有点慢。WebSocket 使用统一的 TCP 连接,需要一方终止连接。在它发生之前,连接保持活动状态。HTTP 需要为单独的请求建立不同的连接。请求完成后,连接会自动断开。

HTTP 长轮询

现今对网络数据安全性也存在更多需求,WebSocket 连接使用的是标准的 TCP 连接,因此它可以在任何支持 TCP 的网络上使用。它使用的是 ws:// 和 wss:// 协议前缀,这些前缀可以与任何域名或 IP 地址结合使用。

WebSocket 连接是可以加密的,可以使用 TLS(Transport Layer Security,传输层安全)协议来保护数据的安全。这种加密连接使用的是 wss:// 协议前缀,与不加密的连接使用的 ws:// 协议前缀相区别。除此之外,WebSocket 还支持安全握手协议(Secure Handshake Protocol),这使得它可以在浏览器和服务器之间进行加密通信。总的来说,WebSocket 具有较高的安全性,可以保护数据的安全。

另外,需要注意的是,WebSocket不是基于HTTP的新协议,因为WebSocket只有在建立连接时才用到了HTTP,升级完成之后就跟HTTP不再有任何关系。

🌳 参考资料

  • 简单了解几种常见的网络通信协议
  • 通信协议/通讯协议有哪些?包含哪些分类?

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

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

相关文章

基于Java海鲜自助餐厅系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

【Syncfusion系列】开篇简介

背景 准备开个新坑,分享下Syncfusion(UI框架)的使用,之前用的handycontry,目前是两者结合起来用。Syncfusion真的是非常的强大,我必须记录一下。 Syncfusion 简介 Syncfusion 是一家软件公司,专…

华为手机内存不足?别焦虑,这里有迁移数据的超实用技巧!

1、usb线缆连接电脑和手机。 2、使用C:\Program Files (x86)\HiSuite\HiSuite.exe工具导出照片和视频。 步骤1:下载和安装HiSuite.exe工具 前往华为官网下载并安装HiSuite.exe工具。安装完成后,通过USB线将你的华为手机连接到电脑上。 步骤2&#xff…

centos 安装elasticsearch8.7.0, 并设置密码访问

访问下载网站 Elasticsearch 8.7.0 | Elastic 进入centos , 创建目录es mkdir /opt/es cd /opt/es wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.7.0-linux-x86_64.tar.gz 3、解压目录 es870 tar -zxvf elasticsearch-8.7.0-linux-x86_64.tar…

NFC CE运行模式

NFC CE运行模式使得携带NFC芯片的设备能充当智能卡(例如信用卡)使用。该运行模式所支持的应用场景极具吸引力,例如用支持该功能的Android智能手机来完成购票、支付,甚至充当门禁卡,汽车钥匙、公交卡等。 图8-19为CE运…

如何使用SQL语句创建触发器

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 &#x1f…

MySQL的版本从5.7跳到了8.0有哪些原因?

MySQL的版本从5.7跳到了8.0的原因? 一、引言1.1、MySQL是什么?1.2、MySQL 5.7和8.0的历史背景 二、MySQL 8.0的新功能2.1、更好的安全性2.2、更高的性能2.3、更好的可扩展性2.4、JSON支持 三、MySQL 8.0的重要改进3.1、更严格的数据类型检查3.2、其他重要…

第三章 处理机调度

目录 一、调度的概念、层次 2.1 调度的基本概念 2.2 调度的三个层次 2.2.1 高级调度 2.2.2 低级调度 2.2.3 中级调度 2.2.3.1 进程的挂起态 2.2.4 三层调度的联系、对比 二、进程调度的时机、切换与过程、方式 2.1 进程调度的时机 2.2 进程调度的方式 2.2.1 非抢占…

MFC的main函数

-- 我们走得太远,忘掉了来时路。 MFC程序的main在哪里? MFC的main是_tWinMain(),有的版本是WinMain(),AfxWinMain(),总之会有Main字样。 作为C/C…

【Spring】Spring有什么用?Spring核心与设计思想之IOC与DI

文章目录 1 何为 Spring?2 什么是容器?3 理解Spring的 IOC3.1 传统开发的缺陷3.2 基于 IOC 思想的开发3.3 再谈Spring中的 IOC 4 理解Spring中的 DI写在最后 1 何为 Spring? Spring是一个开源的、轻量级的、面向企业级的Java应用框架。它提供…

(秋招)vins中的光流法

vins中的光流法 说到光流法,首先介绍其假设条件: 1.亮度恒定,就是同一点随着时间的变化,其亮度不会发生改变。这是基本光流法的假定(所有光流法变种都必须满足),用于得到光流法基本方程。就是…

【CSS3系列】第七章 · 过渡和动画

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

可视化计算机科学论文库DBLP,高效整理文献,生成领域趋势图、词云图

Github项目链接:https://github.com/yaunsine/getDBLP Http克隆方式:git clone https://github.com/yaunsine/getDBLP.git SSH克隆方式:git clone gitgithub.com:yaunsine/getDBLP.git 作者:yaunsine dblp网站相信大家都不陌生&am…

模拟电路系列文章-ADC驱动电路

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 模数转换器(Analog to Digital Convertor,ADC)将模拟量转变成数字量,是电学测量、控制领域—个极为重要的部件。 一个模拟电压信号,在进入A…

统信UOS系统开发笔记(六):提取在线安装软件后,提取其安装包,部署目标机使用离线软件包方式安装软件

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131348876 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

数据库底层物理存储层 的管理方案

​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 数据库的物理存储层 简介 数据库的数据,在物理介质上…

【二叉树part04】| 110.平衡二叉树、257.二叉树的所以路径、404.左叶子之和

目录 ✿LeetCode110.平衡二叉树❀ ✿LeetCode257.二叉树的所有路径❀ ✿LeetCode404.左叶子之和❀ ✿LeetCode110.平衡二叉树❀ 链接:110.平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为&…

Redis的数据类型及对应的数据结构(一)

Redis的数据类型和数据结构的对应关系 左边是 Redis 3.0版本的,也就是《Redis 设计与实现》这本书讲解的版本,右边是7.0,注意区别很大 数据类型包括:String、List、Hash、Set、ZSet 对应的底层数据结构入上图 String的应用场景 缓存对象 …

17.API Promise化 miniprogram-api-promise

目录 1 安装 2 配置 3 使用 1 安装 安装之后会在项目路径下出现这个目录,这个目录中又我们之前安装过的npm包 我们删除掉 miniprogram_npm 这个目录 然后点击构建 npm 构建之后就自动变成这样 2 配置 进入 app.js,然后写下面这些东西 3 使用

C++——auto关键字

目录 1. auto简介 2. auto的使用细则 3. auto的实际应用价值 1. auto简介 在早期C/C中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么? C11中&…