应用层协议 —— websocket

news2025/2/13 2:19:19

websocket介绍

websocket是从HTML5开始支持的一种网页端和服务端保持长连接消息推送机制。

传统的web程序都是属于“一问一答”的形式,即客户端给服务器发送了一个HTTP请求,服务器给客户端返回一个HTTP响应。这种情况下服务器属于被动的一方,如果客户端不主动发起请求,服务器就无法主动给客户端响应。

像网页即时聊天/游戏 这样的程序都是非常依赖“消息推送”的,即需要服务器主动推送消息到客户端。如果只是使用原生的HTTP协议,要想实现“消息推送”一般需要通过“轮询”(客户端定时向服务器发送请求来刷新)的方式实现,但轮询非常占用带宽(成本高)并且也不能及时获取到消息的响应(延迟高)

因此,就产生了WebSocket协议。

WebSocket更接近于TCP这种级别的通信方式,一旦建立连接,通信双方都可以向对方发送数据。

WebSocket原理

WebSocket协议本质上是一个基于TCP的协议

为了建立一个WebSocket连接,客户端首先要向服务器发起一个HTTP请求,一个请求和通常的HTTP请求不同,包含了一些附加头信息,通过这个附加头信息完成握手过程并升级协议的过程。

 报文格式

报文字段较多,重点关注这几个:

 FIN:WebSocket传输数据以消息为概念单位,一个消息有可能由一个或多个帧组成,FIN字段为1表示末尾帧

RSV1-3:保留字段,只在扩展时使用,若未启用扩展则置1,若收到不全为0的数据帧,且没有协商则立即终止连接。

mask:表示Payload数据是否被编码,若为1则必有Mask-Key,用于解码Payload数据,仅客户端发送给服务端的消息需要设置。

Mask-Key:当mask为1时存在,长度为4字节

解码规则:DECODED[i] = ENCODED[i] ^ MASK[i % 4]

Payload length:数据载荷的长度,单位是字节,有可能为7位、7+16未、7+64位。

假设Payload length = x  那么:

x = 0-126 :数据的长度为x字节

x = 126 :后续两个字节代表一个16位的无符号整数,该无符号整数的值为数据的长度

x = 127:后续8个字节代表一个64位的无符号整数(最高位为0), 该无符号整数的值为数据的长度

Payload data:报文携带的数据

WebSocketpp介绍

WebSocketpp是一个跨平台的开源(BSD许可证)头部专用C++库。它允许将WebSocket客户端和服务器功能集成到C++程序中。在最常见的配置中,全功能网络I/O由Asio网络库提供。

主要特性

事件驱动的接口

支持HTTP/HTTPS、WS/WSS、IPv6

灵活的以来管理 - Boost库/C++11标准库

可移植性:Posix/Windows、32/64bit、Intel/ARM

线程安全

Websocketpp同时支持HTTP和WebSocket两种网络协议

以下是一些相关的常用网站:

用户手册:http://docs.websocketpp.org/

github:https://github.com/zaphoyd/websocketpp

官网:http://www.zaphoyd.com/websocketpp

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

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

相关文章

前端食堂技术周刊第 86 期:Remix 拥抱 RSC、2023 React 生态系统、从 0 实现 RSC、字节跳动 Mobile DevOps 工程实践

美味值:🌟🌟🌟🌟🌟 口味:椰子水 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 Remix 拥抱 RSCWebContainers 原生支持 npm、yarn 和 pnpm2023 React 生态系…

MySQL InnoDB集群部署及管理全教程

MySQL InnoDB 集群提供完整的高可用性 MySQL 的解决方案。通过使用MySQL Shell附带的AdminAPI,您可以轻松 配置和管理至少三个MySQL服务器的组 实例以充当 InnoDB 集群。 InnoDB 集群中的每个 MySQL 服务器实例都运行 MySQL 组复制,提供复制机制 InnoDB…

LoadRunner 2023 下载和安装

下载 LoadRunner目前最新的版本是2023版,需要到Micro Focus公司的官网注册账号然后申请下载,比较麻烦,这里我把大家常用的社区版本,搬运到阿里云盘上,供下载: https://www.aliyundrive.com/s/WtHSzD4MrXw …

面试了十几家软件测试公司谈谈我最近面试的总结

由于互联网裁员,最近在 bosss 上投了些简历,测试开发岗,看看目前市场情况。 虽然都在说大环境不好,失业的人很多,我最近约面试的还是比较多的,说说最近的体会吧,希望能给大家提供价值。 1、20K…

教你制作一个简单的进销存管理软件,值得收藏!

首先要制作进销存软件,要具体了解进销存到底是什么含义,这三个字分别代表什么流程,在整个进销存管理中的组成。再根据不同的流程制作进销存软件相对应的部分—— 01进销存的定义 “进”——采购 采购是进销存管理的重要组成部分&#xff0…

微信开放平台第三方开发,注册试用小程序,一整套流程

大家好,我是小悟 对服务商来说,试用小程序的好处不言而喻,主打一个先创建后认证的流程。只需要提供小程序名称和openid便可快速注册一个试用小程序,在认证之前,有效期14天,大致流程如下。 注册试用小程序 …

HCIA-RS实验-配置DHCP

什么是DHCP DHCP是动态主机配置协议(Dynamic Host Configuration Protocol)的缩写,它是一种网络协议,用于自动分配IP地址、子网掩码、网关以及DNS服务器等网络参数给计算机,从而简化了网络管理和配置。 DHCP服务器的…

robotframework+python接口自动化的点滴记录

在robotframeworkpython框架上写了两三天的接口自动化,做了一些笔记。 1.在断言的时候经常由于数据类型导致较验不通过,值得注意的是,在定义常量或者变量的时候,使用${}代表int类型,例如${2}就代表数字2,另…

Qt学习09:其他基本小控件

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 QSpinBoxQDateTimeEditQComboBoxQSliderQRubberBand QSpinBox 微调框,可以通过点击增加减小或者输入来调整数据。 继承自:QAbstractSpinBox 同时这个类还具有Double类型的版本。 常用操…

搭建Scala开发环境

一、Windows上安装Scala 1、到Scala官网下载Scala Scala2.13.10下载网址:https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接,将scala安装程序下载到本地 2、安装Scala 双击安装程序图标,进入安装向导&…

笔试强训错题总结(二)

笔试强训错题总结(二) 选择题 下列哪一个是析构函数的特征() A. 析构函数定义只能在类体内 B. 一个类中只能定义一个析构函数 C. 析构函数名与类名不同 D. 析构函数可以有一个或多个参数 析构函数可以在类中声明&#xff0c…

np.arange()用法+reshape+np.dot()

1.np.arange()用法 np.arange()函数返回一个有终点和起点的固定步长的排列 # 参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况 # 1)一个参数时,参数值为终点,起点取默认值0&#xff…

SpringBootSecurity 简单明了

在autoConfiguration Jar的imports文件里面有 SecurityFilterAutoConfiguration类,这样springboot会自己加载这个类。 该类的作用是向容器内部注入一个RegisterBean叫DelegatingFilterProxyRegistrationBean,由于它同时实现了ServletContextInitializer接…

Redis问题处理

1、jemalloc/jemalloc.h:没有那个文件或目录 解决方法: 正确解决办法(针对2.2以上的版本) 清理上次编译残留文件,重新编译 make distclean && make

【学术小白如何写好论文】文献综述

文章目录 一、前言1.目的2.作用 二、切入角度三、写作方法 一、前言 前言:在撰写这部分的时候,我们首先要明确文献综述的目的是什么,作用是什么。 1.目的 梳理前人研究的脉络找出前人研究的不足 2.作用 让本研究更充实,告诉读者…

路径规划算法:基于蛾群优化的路径规划算法- 附代码

路径规划算法:基于蛾群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蛾群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法蛾群…

SpringSecurity实现前后端分离登录token认证详解

目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…

翻译的技巧

400字左右的文章中划出5个句子, 30分钟内将其翻译成中文,分值10分。文章的题材大多是有关政治、经济、文化、教育、科普以及社会生活,议论文为主,说明文为辅,结构严谨,逻辑性强,长难句较多。不仅…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

mcu:利用Cortex-M中的DWT实现高精度计时

1、Cortex-M中的DWT 在Cortex-M里面有一个外设叫DWT(Data Watchpoint and Trace),是用于系统调试及跟踪。 它有一个32位的寄存器叫CYCCNT,它是一个向上的计数器,记录的是内核时钟运行的个数,内核时钟跳动一次,该计数器…