网络 | 应用层-websocket协议概述与握手过程解析

背景:这里为了实现消息实时传输决定引入websocket协议。
在这里插入图片描述
不管是发送消息还是接收消息,都需要实时传输,张三发给李四,李四立马就能收到,基于HTTP实现是有些困难的。
在这里插入图片描述
但轮询方式也带来了一些问题
1、消耗更多系统资源:接收方在等待过程中需要频繁给服务器发起请求,大部分是空转的
2、获取到消息不够及时:需要等到下个请求周期才能拿到数据

提高轮询频率,获取消息及时但系统资源消耗变多
降低轮询频率,系统资源消耗变少但获取消息不及时了
所以为了更好的解决上边的消息推送问题,我们引入websocket协议

一、概述

websocket是应用层协议,与http地位对等,都是基于传输层tcp协议实现的。

为了兼容现有设施,websocket协议使用与http协议相同端口,使用http upgrade机制实现websocket握手,当握手完成,通信双方可以按照websocket方式进行交互。

websocket中,通信双方数据传输的基本单元为帧,websocket 的帧 可以分为两类, 一类是用于传输控制信息的帧(如通知对方关闭 websocket 连接), 一类是用于传输应用数据的帧, 使用 websocket 协议通信的双方都需要首先进行握手, 只有当握手成功之后才开始使用 帧 传输数据。

二、握手过程

  1. 浏览器发起的HTTP请求中带有特殊的header:connection:upgrade upgrade:websocket
  2. 服务器返回带有特殊的header:connection:upgrade upgrade:websocket,特殊响应码:101

在这里插入图片描述

注意:websocket基于HTTP实现这种说法是错误的,HTTP相当于是websocket的“工具人”!

客户端通过HTTP发送协议升级的请求,服务器通过HTTP返回同意协议升级的响应,握手过程完成后,两者就不再通过HTTP通信,而是通过websocket通信了。

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

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

相关文章

【JavaEE】Maven简介与实用指南:项目构建和依赖管理的高效工具

目录 Maven什么是 Maven为什么学 Maven创建一个Maven项目依赖传递依赖排除 Maven 仓库本地仓库中央仓库私服 Maven设置国内源配置当前项⽬setting设置新项⽬的setting Maven 什么是 Maven 官⽅对于 Maven 的描述: Maven 是⼀个项⽬管理⼯具。基于 POM(Project Object Model,…

C语言基础——循环语句

🌺​🙏🙏🙏欢迎大家观看,写的好的话希望三连感谢🙏🙏🙏🌺 文章目录 一、循环语句的介绍 二、不同循环语句的使用 1.while循环 1.1 while循环的使用方式 1.2 while循环的执…

C语言贪吃蛇

注 :本文是基于链表实现贪吃蛇游戏 1.Win32 API 本篇文章中实现贪吃蛇会用到一些Win32 API的知识,接下来简单做下介绍 1.1 Win32 API Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是⼀个 很大的服务中…

使用Matplotlib绘制正弦和余弦函数曲线

前言 在数据可视化领域,Matplotlib是一个功能强大的Python库,它允许用户创建各种静态、交互式和动画图形。本文将引导您通过一个简单的示例,学习如何使用Matplotlib绘制正弦和余弦函数曲线。 第一步:导入必要的库: …

苍穹外卖项目完结

项目导航:gitee链接 历时两周多的苍穹外卖项目终于完结,其实如果没有其他任务的影响,可以更快的,虽然项目简单,但是收获还是很多的。接下来微服务,然后补习一下前端知识,最后毕设开工。 苍穹外…

【回溯 网格 状态压缩】52. N 皇后 II

本文涉及知识点 回溯 网格 状态压缩 LeetCode52. N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入&#x…

桌面怎么分类便签 桌面分类便签设置方法

桌面便签,一直是我工作和学习的好帮手。每当灵感闪现或是有待办事项,我都会随手记录在便签上,它们就像我桌面上的小助手,时刻提醒我不要遗漏任何重要事务。 但便签一多,管理就成了问题。一张张五颜六色的便签贴满了我…

【Linux笔记】 基础指令(二)

风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介: mv 命令是 move 的缩写,可以用来移动文件或者将文件改名,是 Linux 系统下常用的命令,经常用来备份文件或者目录 语法: mv [选项] 源文件或目录 目标文件或目录…

GitHub操作

远程库-GitHub GitHub网址 GitHub是全球最大的远程库 1. 创建远程库 2. 远程仓库操作 2.1 创建远程仓库别名 git remote -v 查看当前所有远程库地址别名 git remote add 别名 远程地址 设置远程库地址别名 案例操作 起一个别名会出现两个别名,是因为既可以拉取…

vscode默认终端设置为cmd的方法

vscode默认终端是powershell,执行某些命令时会提示权限等问题,如果更习惯使用cmd终端的话,可以将默认终端配置为cmd。 方法一: 方法二: 如果你想更改默认的终端,可以通过以下步骤操作: 打开 VSCode。使用…

深入理解Linux下的网络监控工具:iftop

目录标题 1. 什么是iftop?2. 安装iftop在Debian/Ubuntu上安装在CentOS/RHEL上安装在其他Linux发行版上 3. 使用iftop监控网络流量命令行选项界面说明交互命令 4. 相关参数及说明 在维护和监控Linux服务器时,了解网络流量的细节非常重要。网络监控可以帮助我们诊断延…

el-select下拉框 添加 el-checkbox 多选框,支持全选、取消全选

el-select下拉框 添加 el-checkbox 多选框,支持全选、取消全选 前言一、实现思路二、实现代码1.模板代码2. css 样式3.js 代码 DEMO 演示总结 前言 实现效果预览 提示:本内容基于element-ui 组件实现,如果使用其他组件库、可参考下面实现方…