OkHttp3源码详解之 okhttp连接池复用机制(一)

本文讨论了HTTP1.1中的Keep-Alive连接复用原理,分析了其如何通过减少TCP三次握手来提升性能。同时,详细介绍了OkHttp中的ConnectionPool机制,包括连接的缓存、清理策略,以及如何有效地管理闲置连接以保持性能和内存资源的高效利用。

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

keep-alive 就是浏览器和服务端之间保持长连接,这个连接是可以复用的。在HTTP1.1中是默认开启的。

连接的复用为什么会提高性能呢?

通常我们在发起http请求的时候首先要完成tcp的三次握手,然后传输数据,最后再释放连接。三次握手的过程可以参考这里 TCP三次握手详解及释放连接过程

一次响应的过程

19956127-4ea0889b80991291.png

在高并发的请求连接情况下或者同个客户端多次频繁的请求操作,无限制的创建会导致性能低下。

如果使用keep-alive

19956127-9733ad1c06a77aa4.png

在timeout空闲时间内,连接不会关闭,相同重复的request将复用原先的connection,减少握手的次数,大幅提高效率。

并非keep-alive的timeout设置时间越长,就越能提升性能。长久不关闭会造成过多的僵尸连接和泄露连接出现。

那么okttp在客户端是如果类似于客户端做到的keep-alive的机制。

2、连接池的使用

========

连接池的类位于okhttp3.ConnectionPool。我们的主旨是了解到如何在timeout时间内复用connection,并且有效的对其进行回收清理操作。

其成员变量代码片

/**

  • Background threads are used to cleanup expired connections. There will be at most a single

  • thread running per connection pool. The thread pool executor permits the pool itself to be

  • garbage collected.

*/

private static final Executor executor = new ThreadPoolExecutor(0 /* corePoolSize */,

Integer.MAX_VALUE /* maximumPoolSize /, 60L / keepAliveTime */, TimeUnit.SECONDS,

new SynchronousQueue(), Util.threadFactory(“OkHttp ConnectionPool”, true));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值