WebSocket协议解析
文章目录
- 一、HTTP协议与HTTPS协议
- 1.HTTP协议的用处
- 2.HTTP协议的特点
- 3.HTTP协议的工作流程
- 4.HTTPS协议的用处
- 5.HTTPS协议的特点
- 6.HTTPS协议的工作流程
- 二、WebSocket协议出现的原因
- 1. 传统的HTTP请求-响应模型
- 2. 轮询(Polling)
- 3. 长轮询(Long Polling)
- 4. Server-Sent Events (SSE)
- 5. WebSocket
- 三、WebSocket协议解析
- 1.特点
- 2.建立连接和数据通信
- 第一步: 客户端发起HTTP请求
- 第二步: 服务器响应
- 第三步: 握手完成
- 第四步: 数据传输
- 掩码操作示例
- 第五步: 连接关闭
一、HTTP协议与HTTPS协议
1.HTTP协议的用处
HTTP (Hypertext Transfer Protocol, 超文本传输协议) 是一种用于从网络服务器传输超文本到本地浏览器的传输协议。它确保了高效且准确的信息传输,并定义了在数据通信过程中客户端与服务器之间的交互行为。
- Web浏览: 当用户在浏览器地址栏输入网址或点击链接时,客户端向服务器发送一个HTTP请求以获取资源。服务器响应这些请求并返回HTML页面,浏览器再将这些页面渲染成可视化的网页。
- 数据交换: HTTP支持多种数据类型的传输,包括但不限于图像、视频、文本和其他多媒体内容。这使得Web应用程序能够提供丰富的用户体验。
2.HTTP协议的特点
- 无状态协议: HTTP是一种无状态协议,意味着每次连接只处理一个请求,服务器不会保留关于客户端的任何状态信息。这种设计简化了服务器的实现,但也可能导致一些需要维护状态的应用程序需要使用cookies或session来跟踪用户会话。
- 灵活: HTTP允许传输任意类型的数据对象,并且可以通过不同的MIME类型来标识数据格式。
- 简单快速: HTTP请求方法简洁明了,服务器通常能够迅速响应这些请求。
- 基于文本: 所有命令和消息都是纯文本形式,易于调试和理解。
3.HTTP协议的工作流程
- HTTP协议是基于TCP/IP模型的应用层协议:
一个典型的HTTP请求由以下几个部分组成:
- 请求行: 包含请求的方法(GET、POST等)、请求的URL和使用的HTTP版本。
- 请求头: 包含客户端信息、认证信息以及其他用于控制请求行为的元数据。
- 空行: 分隔请求头和请求体。
- 请求体: 可选部分,包含了请求的数据,例如表单提交的数据。
HTTP响应同样也包含以下几个部分:
- 状态行: 包含HTTP版本、状态码及描述该状态码的文字说明。
- 响应头: 包含服务器信息、认证信息及其他控制响应行为的元数据。
- 空行: 分隔响应头和响应体。
- 响应体: 包含了服务器响应的数据,如HTML文档或其他类型的文件。
- 用户从在浏览器输入url请求资源,到获得资源并渲染在页面上的完整流程:
-
URL 解析和域名解析:
- 用户在浏览器地址栏输入URL。
- 浏览器解析URL,提取协议、主机名、端口(如未指定则使用默认端口)、路径和查询字符串。
- 浏览器进行域名系统(DNS)查找,将域名转换为对应的IP地址。
-
建立TCP连接:
- 浏览器与服务器建立TCP连接,这涉及到三次握手过程。
-
发起HTTP请求:
- 若URL使用HTTP协议,浏览器会直接发送HTTP请求。
- 若URL使用HTTPS协议,浏览器会先与服务器建立安全连接,包括SSL/TLS握手,然后加密的HTTP请求通过该安全连接传输。
-
服务器处理请求:
- 服务器接收到请求后,根据请求的资源类型和路径等信息处理请求。
- 如果请求的是静态资源(如HTML、CSS、JavaScript文件),服务器会直接从文件系统中读取并返回。
- 如果请求的是动态资源,服务器可能需要运行相关的应用程序或脚本来生成响应内容。
-
返回HTTP响应:
- 服务器将请求的资源或生成的页面作为HTTP响应返回给客户端。
- HTTP响应包含状态码、响应头和响应体。
-
浏览器处理响应:
- 浏览器解析响应,根据状态码确认是否成功获取资源。
- 对于HTML文档,浏览器开始解析HTML并构建DOM(文档对象模型)。
- 遇到链接到外部资源(如CSS、JavaScript、图片等)的标签,浏览器会再次发起请求下载这些资源。
-
渲染页面:
- 浏览器根据DOM和CSSOM(CSS对象模型)渲染页面,这是渲染引擎的工作。
- JavaScript文件被执行,可能会对页面内容和结构进行动态修改。
-
显示结果:
- 浏览器在解析完HTML、CSS和执行完JavaScript后,将最终的页面呈现给用户。
-
关闭连接:
- 一旦页面渲染完毕,浏览器通常会关闭与服务器的TCP连接,但在持久连接(keep-alive)的情况下,此连接可能会保持打开状态以供后续请求使用。
整个过程涉及网络通信、协议解析、安全加密、数据处理和页面渲染等多个环节,每个环节都对网页加载性能有重要影响。
4.HTTPS协议的用处
HTTPS (Hypertext Transfer Protocol Secure) 是HTTP的安全版本,它在HTTP的基础上加入了SSL/TLS层,主要用于需要高度安全性的网站,比如银行、电子商务网站等,以确保用户的信息安全。
- 加密通信: 使用SSL/TLS协议对数据进行加密,以防止数据在传输过程中被截获或监听。
- 身份验证: 通过数字证书验证服务器的身份,确保用户访问的是合法的网站,从而防止中间人攻击。
- 数据完整性: 保证数据在传输过程中的完整性和未被篡改。
5.HTTPS协议的特点
- 安全性: 通过加密技术来保护传输的数据,防止数据被窃取或篡改。
- 认证: 通过数字证书来验证通信双方的身份,确保其真实性。
- 可靠性: 提供数据的完整性校验,确保接收到的信息是完整无误的。
6.HTTPS协议的工作流程
HTTPS在HTTP的基础上通过SSL或TLS进行加密处理。
SSL/TLS协议在传输数据之前,会先在客户端和服务器之间建立一条加密通道。
- HTTPS通过以下步骤确保安全通信:
- 客户端发起TCP连接请求;
- 服务器响应TCP连接;
- 客户端和服务器进行SSL/TLS握手:
- 客户端向服务器发送“Client Hello”消息,其中包含客户端支持的SSL/TLS版本和加密套件列表。
- 服务器选择一个加密套件,并发送“Server Hello”消息,确认所选的加密套件,并附带自己的数字证书。
- 客户端验证服务器的数字证书,并生成一个随机数作为会话密钥,然后使用服务器公钥加密此会话密钥后发送给服务器。
- 服务器解密会话密钥,并确认密钥已接收。
- 握手成功后,加密的HTTP数据传输开始;
- 通讯完成后,断开连接。
总之,HTTP和HTTPS构成了互联网通信的基础,而随着网络安全意识的提高,HTTPS正逐步取代传统的HTTP成为主流的网络通信协议,为用户提供更安全的网络环境。
二、WebSocket协议出现的原因
WebSocket技术的出现主要是为了解决传统HTTP协议在实现实时双向通信方面存在的不足,提高通信效率并简化应用开发。
-
克服HTTP轮询的局限性:
传统HTTP协议下的轮询机制要求浏览器定期向服务器发起HTTP请求以获取更新,这种方式不仅效率低下,而且消耗大量带宽资源。
HTTP请求头部较长,而实际传输的有效数据往往较少,导致资源浪费严重。 -
实现实时双向通信的需求:
随着互联网应用的发展,对于即时消息、在线游戏等需要实时双向通信的应用场景越来越多。
传统HTTP协议无法满足服务器主动向客户端推送数据的需求,限制了这类应用的实现。 -
提高通信效率:
WebSocket协议仅需一次握手即可建立持久连接,之后客户端与服务器之间可以直接进行高效的数据交换。
这种全双工(full-duplex)的通信方式极大地提高了数据传输的速度和效率。 -
简化开发复杂度:
WebSocket作为一种新的协议,旨在简化实时通信应用的开发,避免了频繁的HTTP请求和响应带来的复杂性和性能瓶颈。
1. 传统的HTTP请求-响应模型
- 特点:传统的Web应用主要基于HTTP协议,采用请求-响应模型。浏览器(客户端)发送请求到服务器,服务器处理请求后返回响应。
- 限制:HTTP是单向通信,只能由客户端发起请求,服务器被动响应,无法主动推送数据给客户端。
2. 轮询(Polling)
- 背景:随着Web应用的多样化,特别是对实时数据的需求增加,开发者开始寻求方法让服务器能够“推送”数据给客户端。
- 方法:客户端定期(例如每几秒钟)向服务器发送HTTP请求查询是否有新数据。
- 限制:轮询会增加服务器负载,同时由于HTTP请求头较大,造成带宽浪费。此外,频繁的请求也会影响用户体验。
3. 长轮询(Long Polling)
- 改进:为了解决轮询带来的问题,长轮询技术应运而生。
- 方法:客户端发起请求后,服务器在没有新数据时保持连接打开状态,直到有新数据时才返回响应。
- 优点:相比普通轮询,减少了不必要的请求次数,提高了效率。
- 限制:仍然基于HTTP协议,存在连接保持时间的限制,且服务器资源占用较多。
4. Server-Sent Events (SSE)
- 介绍:SSE是一种简单的服务器推送技术,允许服务器向客户端发送事件更新。
- 方法:服务器通过HTTP连接持续发送数据流到客户端,客户端监听这些事件并做出响应。
- 适用场景:适用于只需要服务器向客户端推送数据的场景,如股票价格更新或新闻流。
- 限制:仅支持单向通信,即服务器到客户端的通信。
5. WebSocket
- 背景:随着Web应用对实时双向通信的需求日益增长,需要一种更加高效、低延迟的通信方式。
- 特点:
- WebSocket协议是在HTML5中引入的,它提供了一种在客户端和服务器之间建立持久连接的方式。
- 一旦连接建立,双方就可以自由地发送数据,实现了全双工通信。
- WebSocket基于TCP/IP协议,使用HTTP进行握手,之后转换为二进制帧传输数据,大大减少了通信开销。
- WebSocket连接一旦建立,就可以长期保持,减少了频繁建立和关闭连接的开销。
三、WebSocket协议解析
1.特点
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。它被设计用于替代HTTP协议中的轮询请求,以提供更高效的实时数据传输服务。以下是WebSocket协议的一些主要特点:
全双工通信:
- WebSocket允许服务器和客户端双向通信,即数据可以同时从客户端发送到服务器端,也可以从服务器端发送到客户端。
持久连接:
- 一旦WebSocket连接建立后,就会保持打开状态,直到其中一方关闭连接。这使得实时应用的延迟大大降低。
减少开销:
- 相比于HTTP轮询,WebSocket减少了每次消息交换所需的头部大小和其他开销,提高了数据传输效率。
高效的数据传输:
- WebSocket使用二进制帧格式传输数据,可以有效减少文本格式如JSON或XML带来的额外负载。
支持多种类型的数据:
- WebSocket不仅可以传输文本数据(UTF-8编码),还可以传输二进制数据(如图片、音频和视频等)。
心跳机制:
- WebSocket定义了心跳机制来检测连接是否仍然活动,以避免不必要的重连。
安全性:
- WebSocket支持加密连接(wss://),可以通过TLS/SSL协议保护数据传输的安全性。
多路复用:
- 尽管WebSocket本身不直接支持多路复用,但可以在一个连接上通过不同的标识符来区分不同的会话或数据流。
跨平台兼容性:
- WebSocket协议在现代浏览器中得到广泛支持,并且可以在服务器端使用多种编程语言实现。
简单易用:
- WebSocket API简单直观,易于开发人员理解和使用。
2.建立连接和数据通信
WebSocket协议建立连接的过程是一个比较典型的握手过程,它基于HTTP协议来完成。以下是WebSocket连接建立的详细步骤:
第一步: 客户端发起HTTP请求
- 请求发起:
-
客户端通过HTTP发起一个特殊的GET请求到服务器,该请求包含特定的
Upgrade
头,表明希望升级到WebSocket协议。 -
请求行示例:
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Version: 13
-
其中
Sec-WebSocket-Key
是一个随机生成的Base64编码的值,用于后续的握手验证。 -
Sec-WebSocket-Version
指定使用的WebSocket版本,目前标准版本为13。
-
第二步: 服务器响应
- 响应确认:
-
如果服务器同意升级到WebSocket协议,则返回一个HTTP状态码
101 Switching Protocols
的响应。 -
响应示例:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
-
Sec-WebSocket-Accept
字段包含了客户端发送的Sec-WebSocket-Key
经过处理后的结果。处理方式是将Sec-WebSocket-Key
与一个固定的258EAFA5-E914-47DA-95CA-C5AB0DC85B11
GUID拼接,然后计算SHA-1哈希,最后再进行Base64编码。
-
第三步: 握手完成
- 握手完成:
- 当客户端收到服务器的响应,并验证了
Sec-WebSocket-Accept
字段正确无误后,就完成了握手过程。 - 此时,连接已升级为WebSocket连接,可以开始进行双向通信。
- 当客户端收到服务器的响应,并验证了
第四步: 数据传输
- 数据帧格式:
- WebSocket使用帧来传输数据。每个帧由一个固定长度的头部和一个可变长度的有效载荷组成。
- 头部包括帧类型(例如文本、二进制或控制帧)、掩码标志以及掩码键(仅当客户端向服务器发送数据时需要掩码)。
- 掩码标志以及掩码键:
在WebSocket协议中,掩码标志和掩码键是用来保护客户端到服务器的数据不被中间人窥探的安全措施。具体来说:
掩码标志 (Mask Bit)
-
定义:掩码标志是一个位标志,用来指示WebSocket帧中的有效载荷数据是否已经被掩码(即加密)。这个标志位于WebSocket帧头部的第一个字节中,它是第7个比特位(从右向左计数)。
-
值:如果掩码标志设置为1,则表示有效载荷数据已经被掩码;如果掩码标志设置为0,则表示数据未被掩码。在客户端向服务器发送数据时,掩码标志总是设置为1;而在服务器向客户端发送数据时,掩码标志总是设置为0。
掩码键 (Masking Key)
-
定义:掩码键是一个4字节的随机值,用于对客户端发送给服务器的数据进行掩码处理。掩码键紧随掩码标志之后出现在WebSocket帧头部。
-
使用方法:掩码键用于对有效载荷数据进行XOR操作。具体而言,每4个字节的数据使用掩码键的一个字节来进行XOR操作。例如,第一个字节的数据与掩码键的第一个字节进行XOR,第二个字节的数据与掩码键的第二个字节进行XOR,依此类推。当数据长度不是4的倍数时,最后一个掩码键字节会被重复使用直到数据结束。
掩码操作示例
假设掩码键为 0x12 0x34 0x56 0x78
,并且要发送的有效载荷数据为 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
,那么掩码操作过程如下:
- 第1字节:
0x00 XOR 0x12 = 0x12
- 第2字节:
0x01 XOR 0x34 = 0x35
- 第3字节:
0x02 XOR 0x56 = 0x56
- 第4字节:
0x03 XOR 0x78 = 0x7b
- 第5字节:
0x04 XOR 0x12 = 0x16
(掩码键循环) - 第6字节:
0x05 XOR 0x34 = 0x37
- 第7字节:
0x06 XOR 0x56 = 0x5e
- 第8字节:
0x07 XOR 0x78 = 0x7f
因此,掩码后的数据为 0x12 0x35 0x56 0x7b 0x16 0x37 0x5e 0x7f
。
当服务器接收到这个掩码后的数据时,它会使用相同的掩码键来反掩码(解密)这些数据,从而恢复出原始数据。
掩码机制确保了客户端到服务器的数据不会在传输过程中被轻易读取,增加了通信的安全性。
- 数据传输:
- 双方可以开始发送数据帧。文本数据通常使用UTF-8编码,而二进制数据则按原样传输。
- 控制帧用于特殊目的,比如关闭连接(Close帧)、ping和pong(Ping帧和Pong帧)等。
第五步: 连接关闭
- 关闭连接:
- 任何一方都可以发送一个Close帧来请求关闭连接。
- 接收方接收到Close帧后,可以选择发送自己的Close帧作为响应。
- 最终,双方都发送完数据后,会关闭TCP连接。
相关文章:

WebSocket协议解析
文章目录 一、HTTP协议与HTTPS协议1.HTTP协议的用处2.HTTP协议的特点3.HTTP协议的工作流程4.HTTPS协议的用处5.HTTPS协议的特点6.HTTPS协议的工作流程 二、WebSocket协议出现的原因1. 传统的HTTP请求-响应模型2. 轮询(Polling)3. 长轮询(Long…...

ES6 (一)——ES6 简介及环境搭建
目录 简介 环境搭建 可以在 Node.js 环境中运行 ES6 webpack 入口 (entry) loader 插件 (plugins) 利用 webpack 搭建应用 gulp 如何使用? 简介 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版…...

HarmonyOS开发案例:列表场景实例-TaskPool
介绍 本实例通过列表场景实例讲解,介绍在TaskPool线程中操作关系型数据库的方法,涵盖单条插入、批量插入、删除和查询操作。 效果图预览 使用说明 进入页面有insert(单条数据插入)、batch insert(批量数据插入)、query(查询操作)三个按钮,…...

谷歌浏览器如何隐藏书签
谷歌浏览器的书签栏是一个极为方便的功能,它能够帮助用户快速访问自己频繁使用的网页。然而,有些时候为了保护个人隐私或使浏览界面更为简洁,我们可能需要隐藏书签栏。接下来就为大家分享如何隐藏谷歌浏览器的书签栏,一起来看看吧…...
SQL - 视图
我们可以把查询或子查询存到视图里,视图的作用就像一张虚拟表,再次查询时,就不需要再写一次复杂的查询。创建视图 create view 视图名 as (查询); create or replace view clients_balance as (查询); create or replace view clients_balanc…...
centos7环境升级默认的gcc 4.8.5到gcc 8.2.0, 并且升级glibc到glibc 2.28
这里写目录标题 makegccglibc make #下载 wget http://ftp.gnu.org/gnu/make/make-4.2.tar.gz tar -xf make-4.2.tar.gz cd make-4.2 ./configure make -j4 make install mv /usr/bin/make /usr/bin/make_bak cp ./make /usr/bin/make -v GNU Make 4.2 Built for x86_64-pc-li…...

FastHTML:使用 Python 彻底改变 Web 开发
什么是 FastHTML?🌐 FastHTML 是一个现代 Python Web 应用程序框架,其真正目的是让 Python 开发人员轻松进行 Web 开发。它大大减少了对 JavaScript 和 CSS 构建交互式和可扩展 Web 应用程序的依赖。FastHTML 通过使用 Python 对象来表示 HTM…...

快速排序的深入优化探讨
快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后,key对数组的分割,如果每次选key基本⼆分居中,那么快排的递归树就是颗均匀的满⼆叉树,性能最佳。但是实践中虽然不可能每次都是⼆分居中,但是性能也还是可…...

c语言杂谈系列:模拟虚函数
从整体来看,笔者的做法与之前的模拟多态十分相似,毕竟c多态的实现与虚函数密切相关 废话少说,see my code: kernel.c#include "kernel.h" #include <stdio.h>void shape_draw(struct shape_t* obj) {/* Call dr…...

短视频推广App不再难!Xinstall来帮忙
在短视频风靡的今天,如何利用这一热门媒介有效推广App,成为了许多推广者关注的焦点。而Xinstall,作为国内专业的App全渠道统计服务商,正是你解决这一难题的得力助手。 首先,Xinstall在数据维度上的优势无可比拟。它能…...

打靶记录13——doubletrouble
靶机: https://www.vulnhub.com/entry/doubletrouble-1,743/ 难度: 中 目标: 取得两台靶机 root 权限 涉及攻击方法: 主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权 学习记录&am…...
awk文本处理工具
awk 是一个强大的文本处理工具,在Shell编程中常用于处理和分析文本数据。它可以按列处理数据,进行模式匹配,生成报告,执行计算等。以下是一些 awk 的主要功能和使用场景: 期待您的关注 美好的观念较美人尤为可爱 目录 …...

计算机毕业设计选题推荐-学院网站系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

Spring模块详解Ⅰ
目录 SpringSpring框架的主要功能模块1. Core Container(核心容器)2. Data Access/Integration(数据访问与集成)3. Web4. AOP (Aspect-Oriented Programming,面向切面编程)5. Instrumentation(工具集&#…...

C语言程序设计-练习篇
山海自有归期,风雨自有相逢。 一 下面代码的结果是什么? int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值,i 5表达式结果为5 printf("%d ", i); //表达式为真&a…...

【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)
💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...

无源互调自动化测试软件应用案例分享:S参数和互调的高效测试
随着产品种类的丰富和市场需求的变化,合肥某电子技术公司意识到,传统的手工测试已无法满足公司持续发展的需要。于是,一场自动化测试转型悄然展开。 一、背景介绍 合肥某电子技术公司成立于2009年,专注于功分器、耦合器、负载器、…...

【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则
一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前,设计模式提供了一套成熟的解决方案,它们是经过多年实践总结出来的,能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧,更是一种编程哲学,它能够提…...
国内服务器安装Docker提示Failed to connect to download.docker.com port 443的解决方案
解决方案 换国内镜像源。我用的是清华的。https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ 自己找自己对应的版本。 例如你的Ubuntu系统。就用下列命令 sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/do…...

前端开发攻略---彻底弄懂跨域解决方案
目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...