Springboot之压缩逻辑源码跟踪流程

news/2025/2/19 17:58:20/

背景

在项目开发过程中,前后端参数比较多,导致网络传输耗时比较多,因此想将数据压缩传输,以减少网络传输的耗时,从而减少接口的响应时间,可以自己实现,但是spring相关的框架已经内置了该功能,因此建议开箱即用比较好

环境

Springboot2+,JDK11,maven3.6,tomcat容器,swagger接口文档测试

 配置

配置中有默认配置,可以按需选择

# 开启请求压缩
  enabled: true mime-types: text/xml,application/xml,application/json

# 设置请求大小,1024kb以上开始压缩
  min-request-size: 1024

server:compression:enabled: true # 开启压缩

结果对比如下

源数据56.6kb,压缩传输之后差不多8.4kb,cpu消耗不明显,压缩传输效果显著 

 

思考 

这时,难免会想springboot的设计大牛们是如何实现压缩的,于是跟踪代码发现。

1、 读取压缩配置类

主要在启动的时候读取配置文件中的压缩配置参数

2、tomcat压缩连接器类

实例化压缩配置类,并根据配置参数将压缩配置设置到AbstractHttp11Protocol<?>中

3、AbstractHttp11Protocol类

使用上一部设置的启用参数,并提供是否压缩的方法

 

 

 

4、Http11Processor类

持有AbstractHttp11Protocol对象,根据是否启用压缩和body是否为空,添加输出过滤器对象

 

 

5、Http11OutputBuffer类

持有多种输出过滤器,根据启用的索引使用目标输出过滤器

 

6、GzipOutputFilter

根据启用的过滤器索引,获取过滤器对象,内部持有GZIPOutputStream对象,将数据写出

 

 结尾

做一些流刷新,资源释放等操作

以上是压缩算法启用和真实生效的流程,记录备查


http://www.ppmy.cn/news/1357043.html

相关文章

平台+低代码:中小企业数字化转型普惠之路

随着数字化转型的深入推进&#xff0c;中小企业面临着数字化转型的压力和挑战。如何在有限的资源和条件下&#xff0c;实现高效、便捷的数字化转型&#xff0c;成为中小企业亟待解决的问题。本文将以“平台低代码”为主题&#xff0c;探讨中小企业数字化转型的新模式&#xff0…

conda与pip的常用命令

conda的常用命令 1.查看conda版本 $ conda --version conda 23.11.02.查看conda的配置信息 $ conda infoactive environment : baseactive env location : /home/myPc/miniconda3shell level : 1user config file : /home/myPc/.condarcpopulated config files : conda vers…

MIT-BEVFusion系列九--CUDA-BEVFusion部署2 create_core之参数设置

目录 加载命令行参数main 函数中的 create_core图像归一化参数体素化参数稀疏卷积网络参数真实世界几何空间参数 (雷达坐标系下体素网格的参数)解码后边界框的参数构建 bevfusion::Core 存储推理时需要的参数 本章开始&#xff0c;我们将一起看CUDA-BEVFusion的代码流程&#x…

react渲染流程是怎样的

整体流程&#xff1a; react的核心可以用uifn(state)来表示&#xff0c;更详细可以用&#xff1a; const state reconcile(update); const UI commit(state);上面的fn可以分为如下一个部分&#xff1a; Scheduler&#xff08;调度器&#xff09;&#xff1a; 调度任务&…

主流开发语言和开发环境?

主流开发语言 Java 简介&#xff1a;Java 是一种广泛使用的面向对象的编程语言&#xff0c;由Sun Microsystems公司于1995年发布&#xff0c;后由Oracle公司接手。Java具有“一次编写&#xff0c;到处运行”的特性&#xff0c;它的跨平台能力得益于Java虚拟机&#xff08;JVM&a…

民安智库如何做汽车满意度调查

汽车调研是一个系统性的过程&#xff0c;需要采用多种方法和工具&#xff0c;以便全面了解汽车市场的现状和趋势、不同品牌汽车的销售情况、消费者的购车需求和偏好等。为了确保调研结果的准确性和有效性&#xff0c;研究人员需要做好样本的选择和数据的处理和分析工作。那么具…

Android S - 添加按键,上报键值为0

仅作记录 展锐8581模块 device/sprd/mpool/module/keylayout/gpio-keys.kl#仿照下面的形式&#xff0c;新增一行 key 68 F10 WAKE key 114 VOLUME_DOWN WAKE key 115 VOLUME_UP WAKE key 116 POWER WAKE key 212 CAM…

HTML元素和属性快速参考指南

​ 以下是几个与HTML元素和属性相关的参考资料网站链接&#xff1a; HTML Reference - 提供所有HTML元素和属性的免费指南。W3Schools HTML Reference - W3Schools 提供一个广泛的HTML标签和属性参考。freeCodeCamp HTML Cheat Sheet - freeCodeCamp 提供了一个HTML元素列表参…