当前位置:   article > 正文

架构师学习--okhttp3连接池实现_okhttp3 池

okhttp3 池

首先我们需要明白,okhttp比其他网络请求框架的优势在哪里?当然最重要的就是他对传输层的Socket进行了进一步的封装。所谓的封装,就是拿到服务器最原始的数据流,进行解析,返回给用户。大家需要明白一点,socket的连接是需要消耗资源的,如果每一次网络请求都去创建一个socket,显然是不合理的。所以okhttp就引出了连接池的概念。所谓的连接池就是为了复用socket,比如我们请求一个地址,如果下一次在规定时间内,发送同样的请求,那么socket就会被复用。

一、创建连接对象

所谓的连接对象,可以说是封装了Socket。并且记录最后使用它的时刻。
在这里插入图片描述
构造方法中创建socket对象,并且记录当前时间:
在这里插入图片描述
提供方法,判断是否可以复用该连接对象:
在这里插入图片描述

二、创建连接池

首先定义如下字段
在这里插入图片描述
keepLive:超过这个时间,将会回收连接对象
queueList:存放连接对象
isRunning:防止回收线程重复启动
idleTime:当前连接对象的闲置时间

1、添加连接对象

在这里插入图片描述
在这里就开启了清理线程,清理线程就是一个缓存线程池

2、清理线程

在这里插入图片描述
这里开启一个while循环,内部使用waitTime判断何时需要跳出死循环,即队列中没有连接对象就可以跳出死循环。这里会调用clean()方法。做真正的清理工作

3、clean

在这里插入图片描述
这里会判断当前连接对象的闲置时间是否已经超过了最大等待时间,然后从队列中移除这些对象。并且计算出所有连接对象的最大闲置时间,计算出下一次进行clean的时间。

4、获取连接对象

在这里插入图片描述
供外部调用,如果需要复用该连接对象,直接从队列中取出来。

三、创建连接池使用管理类

在这里插入图片描述
使用连接池,首先判断当前对象是否存在于连接池中,没有的话需要添加到连接池,并且记录当前对象的添加时间。

四、测试

测试代码如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述
结果显示没有在连接池中的会创建新的连接对象,存在的会复用连接对象。

ok,这样一个连接池就被我们完成了。附上完整代码

完整代码:

代码传送门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/240111
推荐阅读
相关标签
  

闽ICP备14008679号