WebSocket协议基础

文章目录

  • 什么是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.hqwc.cn/news/22717.html

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

相关文章

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

一些抄袭CSDN的爬虫网站(长期收集更新)

目录 一、CodeAntenna1. 简介2. 网址 二、待更新。。。 本文由CSDN点云侠原创&#xff0c;爬虫网站请努力加油爬。 一、CodeAntenna 1. 简介 互联网耻辱柱排行榜Top 1。本人博客里任何一点免费可读的部分都被该网站爬得体无完肤。 2. 网址 https://codeantenna.com/a/B4cMB…

数据可视化:揭开数据的视觉奇迹

随着大数据时代的到来&#xff0c;我们面临着海量的数据&#xff0c;如何从中获取有价值的信息成为一项重要的挑战。数据可视化作为一种强大的工具&#xff0c;通过图表、图形和交互界面&#xff0c;将数据转化为可视化的形式&#xff0c;帮助我们更好地理解和分析数据。 数据可…

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段&#xff08;100-280 nm&#xff09;的深紫外FP&#xff08;Fabry-Pero&#xff0c;法布里和珀罗是两位法国的科学家&#xff09;激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

数据分析——AB测试应用与实战

摘要 某电商公司非常注重自己的落地页设计&#xff0c;希望通过改进设计来提高转化率。以往该公司全年转化率平均在13%左右&#xff0c;现在希望设计的新页面能够带来更高的转化率&#xff0c;希望新页面的转化率能有2%的提升&#xff0c;达到15%。在正式推出新页面之前&#…

Non-Local Video Denoising by CNN

摘要 Non-local patch based methods were until recently state-of-the-art for image denoising but are now outper formed by CNNs. Y et they are still the state-of-the-art for video denoising, as video redundancy is a key factor to attain high denoising perfor…

【分布式任务调度】XXL-JOB的任务调度实现原理(四)

文章目录 1.前言2.调度中心流程2.1.任务配置扫描流程2.2.计算任务触发时机2.2.1.已超时5秒以上2.2.2.超时未超过5秒2.2.3.还未到触发时间 2.3.任务触发流程2.3.1.任务触发线程池2.3.2.参数处理2.3.3.任务触发2.3.4.分片广播策略&#xff08;补充&#xff09; 3.执行器流程3.1.任…

Python - Gradio用Blocks构建自定义界面布局的应用程序

什么是Blocks Blocks是Gradio的低级API&#xff0c;它允许你创建比Interfaces更多的自定义web应用程序和演示。简单来说就是比Interfaces更灵活。 一般使用上下文管理&#xff0c;示例代码如下&#xff1a; import gradio as grwith gr.Blocks() as demo:gr.Image("lion…

事务@transactional执行产生重复数据

背景 系统设计之初&#xff0c;每次来新请求&#xff0c;业务层会先查询数据库&#xff0c;判断是否存在相同的id数据&#xff08;id是唯一标识产品的&#xff09;&#xff0c;有则返回当前数据库查到的数据&#xff0c;根据数据决定下一步动作&#xff0c;没有则认为是初次请…

python+pytest接口自动化之测试函数、测试类/测试方法的封装

目录 前言 测试用例封装的一般规则 测试函数的封装 测试类/方法的封装 示例代码 总结 前言 在pythonpytest 接口自动化系列中&#xff0c;我们之前的文章基本都没有将代码进行封装&#xff0c;但实际编写自动化测试脚本中&#xff0c;我们都需要将测试代码进行封装&#…

C# Winfrom将DataGridView数据导入Excel

1.项目添加Word和Excel的COM类型库引用 2.创建Excel工作表 //定义Excel操作对象Microsoft.Office.Interop.Excel.Application excelApp new Microsoft.Office.Interop.Excel.Application();//定义Excel工作表Microsoft.Office.Interop.Excel.Worksheet worksheet excelApp.Wo…

“管理Layui树形图,提高页面交互性与可视化效果“

标题&#xff1a;管理Layui树形图&#xff0c;提高页面交互性与可视化效果 Layui树形图简介一、引入Layui和jQuery库&#xff1a;二、HTML结构准备&#xff1a;三、初始化树形图&#xff1a;四、配置树形图的其他属性和事件&#xff1a;4.1 实体类4.2 PermissionDao方法4.3 Per…