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

本文详细描述了在SpringBoot2.x环境中如何利用内置功能进行数据压缩,包括配置、原理和实现过程,以减少接口响应时间。重点介绍了Gzip压缩算法的启用和生效流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在项目开发过程中,前后端参数比较多,导致网络传输耗时比较多,因此想将数据压缩传输,以减少网络传输的耗时,从而减少接口的响应时间,可以自己实现,但是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对象,将数据写出

 

 结尾

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值