WebSocket协议基础

news2025/1/17 13:48:25

文章目录

  • 什么是websocket
    • websocet 特点
  • 一、websocket 建立连接流程
  • 二、websocket 握手流程
    • 客户端握手包
    • 2.服务端握手包
  • 三、websocket数据
  • 总结
  • 参考


什么是websocket

WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似,但是却区别于http的一种新的协议。Websocekt 支持客户端之间双向通信。
在这里插入图片描述

websocet 特点

  1. websocket 支持双向通信,支持服务端主动向客户端推送数据。
  2. websocket只是满足了tcp 的分包和粘包处理,负载没有做数据处理

一、websocket 建立连接流程

  1. TCP三次握手,建立连接;
  2. websocket 进行握手(握手一次)建立连接;客户端向服务端发送包
  3. 数据通信。

二、websocket 握手流程

websocket 分成两个部分,握手和传输数据。

客户端握手包

代码如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 值是一个base64 编码

2.服务端握手包

代码如下:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

"Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= "这个应答base64编码的数据如何获取?

1.客户端 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
2. websocket GUID : 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
3. 连接:key_sting = dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
4. SHA-1 hash : 对key_string 做hash: key = hash(kkey_sting);
5. 对hash 值做base64 编码:encode_base64(key);

在这里插入图片描述


三、websocket数据

数据部分:数据传输结构
协议结构大体分为4部分: 装填部分+可选,Mask部分、负载长度,负载;

FIN: 表示最后一个数据包;
MASK位,如果MASK位置位,则头部中的Masking-key 长度是4字节;否则Masking-key 长度编程0;
Payload len :负载基本长度度: 1<<7;如果负载长度126 则扩展负载长度占用2字节: 长度127 则占用8字节;

负载长度: 7bit+16 bit或7bit+64bit

在这里插入图片描述
详解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本文简单的记录了一下,websocket 如何建立连接和数据传输的格式。websocket 的特性等

参考

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的服务

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

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

相关文章

AD Class 、设计参数、规则的创建

设计 生产 线宽 间距 过孔 根据生产的要求进行桥接 Class 电源走线 和 信号走线 设计—》类里有 将所有的电源都添加进电源类里 新建的类别可以在Panls的PCB中看到 并且可以在这里面改变线的颜色 区分电源 对于走线的宽度,电源主要是用来载流的&#xff0c;信号主要是用来做信…

彻底理解Handler的设计之传送带模型

作者&#xff1a;彭泰强 0 这篇文章的目的 有时候在Handler相关的文章中可以看到&#xff0c;会把Handler机制的几个角色类比成一个传送带场景来理解。 例如&#xff0c;这篇文章中写到&#xff1a; 我们可以把传送带上的货物看做是一个个的Message&#xff0c;而承载这些货物…

6.2.8 网络基本服务----万维网(www)

6.2.8 网络基本服务----万维网&#xff08;www&#xff09; 万维网即www&#xff08;World Wide Web&#xff09;是开源的信息空间&#xff0c;使用URL也就是统一资源标识符标识文档和Web资源&#xff0c;使用超文本链接互相连接资源&#xff0c;万维网并非某种特殊的计算机网…

力扣 198.打家劫舍【中等】

198.打家劫舍 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/house-robber 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃…

【Vue3】初始化和Composition API(组合式)

Vue3 创建Vue3.0工程查看自己的vue/cli版本&#xff0c;使用Vue/cli创建使用vite创建 查看Vue3.0工程vue.config.js中&#xff0c;关闭语法检查&#xff0c;main.js讲解app.vue讲解 常用的Composition API&#xff08;组合式&#xff09;1.拉开序幕的setup返回对象返回渲染函数…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题&#xff0c;全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测 目录 时序预测 | MATLAB实现Hamilton滤波AR时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 预测在很大程度上取决于适合周期的模型和所采用的预测方法,就像它们依赖于过滤器提取的周期一样。标准 Hodrick-P…

Top-down方法学

Top-down方法学由Intel提出&#xff0c;是一种软件性能分析技术。 x86处理器的PMU一般提供8个PMC&#xff0c;其中4个是固定的PMC&#xff0c;其对应的监控信号是不能配置的。另外4个PMC监控的信号是可以配置的。 Top-down方法学的动机 通过PMC&#xff0c;软件工程师可以获…

【观察】超融合+软件定义,构建双活数据中心“新范式”

随着数字化转型的加速&#xff0c;企业的业务经营活动越来越多依赖于数据中心等基础设施&#xff0c;“全天候”业务连续性运营也正成为大中型企业追求的目标&#xff0c;如何实现减少甚至消除正常和非正常的停机对业务可用性造成的影响&#xff0c;不但是企业IT建设与运维团队…

Spring - 更简单的获取 Bean 对象

目录 二、获取 Bean 对象&#xff08;对象装配或者对象注入&#xff09; 1. 属性注入 1.1 属性注入的优点和缺点&#xff1a; 2. Setter注入 2.1 Setter注入的优点和缺点 3. 构造方法注入&#xff08;spring 官方推荐的对象注入方式&#xff09; 3.1 构造方法的优点和缺点…

【PHP面试题47】Redis的持久化有哪几种?有什么区别?谈谈你的理解

文章目录 一、前言二、RDB&#xff08;Redis数据库&#xff09;持久化方式2.1 触发条件2.2 RDB文件的格式2.3 RDB持久化原理2.4 RDB方式的优缺点 三、AOF&#xff08;Append Only File&#xff09;持久化方式3.1 触发条件3.2 AOF文件的格式3.3 AOF持久化原理3.4 AOF方式的优缺点…

cmake项目相关的变量

cmake项目相关的变量 在cmake项目中&#xff0c;通常需要对路径进行操作&#xff0c;比如我们需要知道源码的顶级目录&#xff0c;源码的构建目录和某个project名字相关的一些目录等。 CMAKE_SOURCE_DIR&#xff0c;这个变量的值代表的是源码的顶级目录。但是这个变量的值可能…

Python(十一)变量多次赋值

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【hadoop】部署hadoop的本地模式

hadoop的本地模式 本地模式的特点部署本地模式测试本地模式是否部署完成 本地模式的特点 没有HDFS、也没有Yarn只能测试MapReduce程序&#xff0c;作为一个普通的Java程序处理的数据是本地Linux的文件一般用于开发和测试 部署本地模式 进入该路径 /root/training/hadoop-2.7…

吴恩达机器学习2022-Jupyter

1 可选实验室: Python、 NumPy 和矢量化 简要介绍本课程中使用的一些科学计算。特别是 NumPy 科学计算包及其与 python 的使用。 2 目标 在这个实验室里将回顾课程中使用的 NumPy 和 Python 的特性。 Python 是本课程中使用的编程语言。NumPy 库扩展了 python 的基本功能&a…

mac 如何批量修改图片名称

mac 如何批量修改图片名称&#xff1f;很多使用mac电脑的小伙伴一直有这样一个疑问&#xff0c;怎么在电脑上一次性的批量修改大量图片的名称&#xff0c;很多小伙伴在电脑上整理图片的时候都需要批量重命名&#xff0c;批量处理的功能可以让我们节省不少的时间和精力&#xff…

抖音seo怎么选择关键词

要查找抖音的关键词&#xff0c;以进行SEO优化&#xff0c;可以按照以下步骤进行&#xff1a; 1. 关键词分析与筛选&#xff1a; 首先&#xff0c;你需要确定你的目标受众和内容类型。了解你的目标用户是谁&#xff0c;他们可能会搜索什么样的内容。然后&#xff0c;使用关键…

虾皮一面:手写一个Strategy模式(策略模式)

说在前面 在40岁老架构师 尼恩的读者交流区(50)中&#xff0c;最近有指导一个小伙伴面试架构师&#xff0c;面试的公司包括虾皮、希音、美团等大厂&#xff0c;目标薪酬50K以上&#xff0c;遇到了一个比较初级的问题&#xff1a; 请手写一个Strategy模式&#xff08;策略模式…

基于物联网技术的养老院管理系统设计与实现_kai

基于物联网技术的养老院管理系统设计与 实现 摘 要 随着我国老年人口数量的逐年增加&#xff0c;人口抚养比也在迅速攀升&#xff0c;越来越多的老年人将走 出家门进入养老院安度自己的晚年。同时国家和地方也相继出台了加快发展老龄事业的政策 方针&#xff0c;作为机构养老…

Shell之循环语句 —— For 实验

循环 循环就是重复执行一段代码的结构&#xff0c;通过循环可在满足一定的条件下&#xff0c;多次执行相同的代码。 循环语句&#xff1a;循环体 —— 代码的总结构 循环条件 —— 当循环条件满足时&#xff0c;循环体代码才会被执行&#xff0c;否则条件不满足…