websocket状态机
websocket突破了HTTP协议单向性的缺陷,基于HTTP协议构建了双向通信的通道,使服务端可以主动推送数据到前端,解决了前端不断轮询后台才能获取后端数据的问题,所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket的状态机进行讲解。
1)websocket状态机
websocket状态机相对于非常经典的TCP状态机来说非常的简单,包括五种状态:INITIAL、CONNECTING、OPEN、CLOSING和CLOSED。其中客户端涉及五种状态:INITIAL、CONNECTING、OPEN、CLOSING和CLOSED,服务端涉及四种状态:INITIAL、OPEN、CLOSING和CLOSED。状态变迁过程如下:

websocket建立过程中状态的变化如下所述:
1)客户端调用connect发起连接,则经过INITIAL进入CONNECTING状态,并且发起握手请求
2)服务端websocket启动进入INITIAL状态
3)服务端接收到客户端的握手请求后回复握手应答,状态变迁为OPEN
4)客户端接收到服务端的握手应答后,状态也变迁到OPEN
(至此客户端和服务端的websocket连接正式链接,可以双向通信了)
5)任何一方都可以关闭websocket连接。发起关闭连接的一方,调用close将发送关闭帧到对端,状态变迁到CLOSING
6)接收到关闭帧的一方状态也变迁到CLOSING,,并发起拆除TCP连接的请求(发送FIN分组,然后经过四次握手后完成TCP连接的关闭操作。
2)websocket协议分析
websocket协议本身是基于TCP的协议,但其中的握手协议使用了HTTP协议,以下是一个websocket客户端与服务端建立连接,连接建立后服务端发送一个票据到客户端,然后客户端发送hello world后,再关闭websocket,报文全貌如下:

前3行是标准的TCP三次握手,建立TCP连接。
第4行到第6行是websocket握手过程,握手完成建立了WEBSOCKET连接(此时客户端和服务端状态机均为OPEN状态)
第7行和第8行是服务端发送票据的报文。
第9行和第10行是客户端发送hello world到服务端
第11行到13行是websocket关闭过程。第11行是客户端发起关闭请求帧(自身进入CLOSING状态),第12行是服务端对关闭帧的确认,第13行是服务端发送关闭请求帧(服务端进入CLOSING状态)
第14行到第17行是服务端发起的关闭TCP连接的过程。TCP连接关闭后,两个状态机均进入CLOSED状态。
3)报文分析
以下仅对websocket相关报文进行分析,TCP的连接建立、关闭和ACK报文不再关注。
客户端发起握手报文如下:

服务端发起握手报文如下:

建立websocket连接后,服务端发送的令牌报文如下:

服务端发送hello word的报文如下:

客户端发送关闭帧报文如下:

服务端发送关闭帧报文如下:

相关文章:
websocket状态机
websocket突破了HTTP协议单向性的缺陷,基于HTTP协议构建了双向通信的通道,使服务端可以主动推送数据到前端,解决了前端不断轮询后台才能获取后端数据的问题,所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…...
JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】
JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】 目录 JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现CPO-Transformer-LSTM多变量回归预测…...
力扣3226 使两个整数相等的位更改次数
写的代码: class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…...
VLAN 划分案例详解
vlan 的应用在网络项目中是非常广泛的,基本上大部分的项目都需要划分 vlan,这里从基础的 vlan 的知识开始,了解 vlan 的划分原理。 为什么需要 vlan: 1、什么是 VLAN? VLAN(Virtual LAN)&…...
[技术总结] C++ 使用经验
const 和 constexpr 有什么区别. const 一般是设置一个只读的属性, 在运行时还有可能通过cast变成一个可修改的. 但是constexpr是告诉编译器这就是一个常亮, 在编译时就可以计算出来然后进行替换.static 修饰的成员函数 & 成员变量 static 修饰的成员函数只能访问 static 修…...
音频数据集
1 多语言 Mozilla Common Voice 下载地址:https://voice.mozilla.org/data 时长:1965小时(目前为止) 最早2017年发布,持续更新,该基金会表示,通过 Common Voice 网站和移动应用,他们…...
Java | Leetcode Java题解之第268题丢失的数字
题目: 题解: class Solution {public int missingNumber(int[] nums) {int n nums.length;int total n * (n 1) / 2;int arrSum 0;for (int i 0; i < n; i) {arrSum nums[i];}return total - arrSum;} }...
指针!!C语言(第二篇)
目录 一. 数组名的理解 二. 一维数组传参的本质 三. 冒泡排序法 四. 二级指针与指针数组 五. 字符指针变量与数组指针 一. 数组名的理解 在我们对指针有了初步的理解之外,今天我们来掌握一些新的知识就是数组与指针,第一个对数组名的了解ÿ…...
AIGC-ToonCrafter: Generative Cartoon Interpolation
论文:https://arxiv.org/pdf/2405.17933 代码:https://doubiiu.github.io/projects/ToonCrafter 给定首尾帧,生成逼真生动的动画 MOTIVATION Traditional methods which implicitly assume linear motion and the absence of complicated phenomena like disoccl…...
牛奶供应(三)
一个字贪,第一天,只能选择制作方式,后面的每一天,在<今天制作>与<前期存储>之间取更优解 例如样例:100 5,200 5,90 20,存储成本为10 第1天: 一定是制作&…...
首批通过 | 百度通过中国信通院H5端人脸识别安全能力评估工作
2024年5月,中国信息通信研究院人工智能研究所依托中国人工智能产业发展联盟安全治理委员会(AIIA)、“可信人脸应用守护计划”及多家企业代表共同开展《H5端人脸识别线上身份认证安全能力要求及评估方法》的编制工作,并基于该方法开…...
JVM---对象是否存活及被引用的状态
1.如何判断对象是否存活 1.1 引用计数算法 概念:在对象头部增加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 优点࿱…...
科研绘图系列:R语言分割小提琴图(Split-violin)
介绍 分割小提琴图(Split-violin plot)是一种数据可视化工具,它结合了小提琴图(violin plot)和箱线图(box plot)的特点。小提琴图是一种展示数据分布的图形,它通过在箱线图的两侧添加曲线来表示数据的密度分布,曲线的宽度表示数据点的密度。而分割小提琴图则是将小提…...
WEB前端09-前端服务器搭建(Node.js/nvm/npm)
前端服务器的搭建 在本文中,我们将介绍如何安装和配置 nvm(Node Version Manager)以方便切换不同版本的 Node.js,以及如何设置 npm(Node Package Manager)使用国内镜像,并搭建一个简单的前端服…...
ASP.NET Core在启动过程中使用数据库实例的几种方式
ASP.NET Core项目启动过程中若要调用SqlSugarClient实例操作数据库数据(假设操作函数如下),特此记录以下几种方式: public class PublicDataBuffer {public static List<EnvironmentRecord> DataBuffer new List<Envir…...
AndroidStudio 编辑xml布局文件卡死问题解决
之前项目编写的都是正常,升级AndroidStudio后编辑布局文件就卡死,还以为是AndroidStudio文件。 其实不然,我给整个项目增加了版权声明。所以全部跟新后,布局文件也增加了版权声明。估计AndroidStudio在 解析布局文件时候因为有版…...
使用 PVE 自签 CA 证书签发新证书
前言 PVE 安装时会自动创建一个有效期 10 年的 CA 证书, 我们可以利用这个 CA 证书给虚拟机中的 Web 应用签发新的 TLS 证书用于提供 HTTPS 服务. 下面以 PVE 虚拟机中通过 Docker 跑的一个 雷池 应用为例进行演示. PVE 证书位置 官方文档: https://pve.proxmox.com/wiki/Pr…...
ubuntu 22.04安装Eigen
1 安装 git clone https://gitlab.com/libeigen/eigen.gitcd eigen mkdir build cd build cmake ..sudo make install... -- Installing: /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry -- Installing: /usr/local/include/eigen3/unsupported/Eige…...
vue使用audio 音频实现播放与关闭(可用于收到消息给提示音效)
这次项目中因为对接了即时通讯 IM,有个需求就是收到消息需要有个提示音效,所以这里就想到了用HTML5 提供的Audio 标签,用起来也是很方便,首先让产品给你个提示音效,然后你放在项目中,使用Audio 标签&#x…...
STM32 产生Hard Fault 调试方法
STM32 产生hard-fault 调试方法 需求 当STM32 产生Hard Fault的时候我们希望可以打印出一些重要的寄存器信息,然后定位代码出错的地方。 参考 https://github.com/ferenc-nemeth/arm-hard-fault-handler 原理 STM32代码运行的时候一般在是main函数while(1)中循…...
软件开发加速安全审查滞后:“查找 - 修复”与“防御 - 推迟”难敌新风险!
ZDNET的关键要点持续部署让旧安全模型过时,漏洞积压令开发团队不堪重负,应用程序安全需向代码创建阶段转移。锻炼时在跑步机上反复踏步,付出努力却原地不动,毫无成就感,第二天再重复就更觉沮丧。应用程序安全也类似&am…...
Nitric本地开发环境搭建:快速测试和调试的完整流程
Nitric本地开发环境搭建:快速测试和调试的完整流程 【免费下载链接】nitric Nitric is a multi-language framework for cloud applications with infrastructure from code. 项目地址: https://gitcode.com/gh_mirrors/ni/nitric Nitric是一个多语言框架&am…...
免费素材资源终极指南:发现300+个高质量免费图片视频网站 [特殊字符]
免费素材资源终极指南:发现300个高质量免费图片视频网站 🚀 【免费下载链接】awesome-stock-resources :city_sunrise: A collection of links for free stock photography, video and Illustration websites 项目地址: https://gitcode.com/gh_mirror…...
AI技能开发脚手架:从零构建大模型应用的标准化起点
1. 项目概述:一个为AI技能开发量身定制的脚手架如果你正在或打算开发一个基于大语言模型的AI技能(Skill),无论是想集成到ChatGPT的GPTs里,还是想构建一个独立的AI Agent,那么你大概率会遇到一个共同的起点问…...
Agnix:为AI智能体打造安全可控的操作系统级执行环境
1. 项目概述:从“智能体”到“操作系统”的范式跃迁最近在开源社区里,一个名为agent-sh/agnix的项目引起了我的注意。乍一看这个名字,agent和agnix的组合,很容易让人联想到这是又一个基于大语言模型的智能体(Agent&…...
IP2366至为芯支持C口双向快充的140W多串锂电池充放电SOC芯片
英集芯IP2366是一款应用于移动电源、电动工具、智能家居、储能电源等方案的多串锂电池充电SOC芯片。支持高达140W的双向同步升降压充放电,充电电流可达5A。支持2至6节锂电池/磷酸铁锂电池串联,集成PD3.1、QC3.0等多种快充协议。内置14bit ADC,…...
用100道题拿下你的算法面试(链表篇-7):复制带随机指针的链表
一、面试问题 给定一个链表的头节点,链表中每个节点都包含两个指针:一个指向下一个节点的 next 指针,以及一个指向链表中任意节点的 random 指针。请复制该链表,并返回新链表的头节点。 二、【朴素解法】使用哈希表 —— 时间复杂…...
2026盘古石取证初赛(APK取证)
APK取证1.分析方俊朗phone.E01检材,筛选优质客户应用将用户查询记录存储在一个加密的本地数据库中。请问该加密数据库的文件名是什么?[答案格式:12_abc.db]题目说了这边是筛选优质客户,其实和手机取证最后一题一样的,先…...
Cognize-Agent™空间智能体,98.5%故障预警准确率,终结非计划停机
Cognize-Agent™空间智能体,98.5%故障预警准确率,终结非计划停机工业制造领域,设备非计划停机始终是制约生产效率、拉高运维成本的核心痛点。传统设备运维依赖定期检修、事后抢修,依赖人工巡检与单一数据监测,无法提前…...
边缘AI与TinyML在医疗影像筛查中的实战:从模型轻量化到临床部署
1. 项目概述:当AI成为医生的“仿生眼”在医疗诊断领域,尤其是癌症早期筛查中,人类医生的经验与肉眼观察长期是金标准。然而,这个标准背后隐藏着巨大的不确定性:研究显示,即便是标准的放射影像学检查&#x…...
