Okhttp3是一个网络请求库。在介绍他的大多数文章中,都有一句 很好很强大。那么这样一个网络请求库怎么个强大呢?
那么要想知道他怎么个强大,就得知道他在各个问题上的处理方式
1、网络连接的稳定性,对于移动端来说,如果用户处在一个网络环境比较差的位置,那么数据的上传和下载都会很慢。一旦网络连接出错,HttpUrlConnection 就会报错,但是Okhttp3可以配置,是否重连,还可以更换访问地址,寻找最终可以到达的网络地址
2、传输的数据包大小,在传输网络数据时,一般的网络请求都是直接将数据直接发送给服务器。但是Okhttp3 他默认使用的是GZIP,因为Okhttp3使用的是Okio(更加高效易用的IO库)的IO流操作,自带GZIP操作。先把数据压缩一遍,然后再发送出去,这样就节省了我们的流量,那么他能给我们节省多少流量呢?请看下图
那么为啥使用GZIP也就清楚了,因为 压缩速度快 压缩率高啊
有的时候,有些用户会反复刷新数据,其实对于后台来说不停的重复请求数据,其实对后台压力蛮大的,这个时候,OkHttp3可以对网络请求进行缓存,通过和后台的最近修改时间做对比,看是否重新拉取数据,还是使用缓存数据。这样也节约了时间,也减少了额外流量的请求。
如果断网了,我们还可以使用缓存,正常的把数据给暂时出来
3、大量的网络通道的处理,连接通道的复用,网络请求都是比较耗时的,尤其是对于移动端,要http连接都是需要3次握手4次挥手的。如果每次请求过来都进行7次连接,可想而知是有多耗性能。而且一般移动端的请求网络次数还是很多的。一般每秒也有2到3次网络请求吧。那么okhttp3会存在一个连接池,如果用完了的连接通道,会回到连接池,便于下一次网络请求使用,这样复用连接通道,就避免了反复的握手和挥手了。
但是同样会有一个问题,如果一瞬间有上百个网络请求,那我是不是得不断的去连接池请求网络连接?这样会不会增大内存的开销? 是的,当然会增加了。怎么办呢? 当然是加一个连接池数量的限制嘛?一般我们自己不会加,但是Okhttp3会自动帮我们加上
但是如果长时间不用网络,我们还占用着与后台的连接通道,那是不是也不太好呢?是的。所以如果一段时间不使用网络,连接通道也就会自动关闭了。这样也就节省了性能开销。
想想如果上百次的网络请求,那得和后台进行多少次握手呀
4、开发人员如何管理网络模块, 灵活性,Okhttp3 真的太灵活了,首先从他的配置方面来说,1、超时就分好几种 比如 读超时,写超时,连接超时,回调超时。
拦截器:Interceptors ,networdInterceptors,打个比方,网络连接有的会出现重定向,那么第一个只会拦截一次,但是第二个会在每一个重定向的时候拦截一次。
监听器:虽然监听器就那么一个接口,但是接口中会监听的网络请求过程真的很多
![](https://img.haomeiwen.com/i7774533/25865834143bc656.png)
每一个过程她都会回调一个监听方法
那么开始的方法和结束的方法永远不变,都是callStart 和callEnd,那么这样的话,我们就能计算一个网络请求的耗时情况了。
但是有的时候,我又不想监控所有网络请求,不要紧,我们还有EventFactory 可以进行选择性拦截监听,不管是按百分比监听,还是按接口名来监听,通通满足
请求体数据类型多样:字符串请求体(最大1mb),使用okio的IO流数据(数据大小不限),请求体为文件类型,表单数据请求体,multipart多种表单数据类型的上传(可包含k/v数据,以及图片等)适应各种类型的数据
网络请求的控制能力,啥时候想取消就啥时候调用 call.cancel()方法 即可,这个一般用于页面销毁时,页面级别的请求就得同步销毁掉
灵活性相关的内容,大家可以参考:Recipes - OkHttp
http、https、http/2 都已支持。
5、安全性 https的网络连接方式,各种证书的配置,一般情况下使用Okhttp3默认的配置即可,如果对安全要求比较高的话,可以自定义配置证书,但是这个得联系服务器的证书管理员。
基本上这就是Okhttp3的强大的几个点了。大致已经包括了网络请求的各个关键点的问题。比如:网络不稳定的问题、节省数据流量、网络性能的开销、开发人员对网络的控制力,网络安全等。基本上所列举的这几个点也是所有网络请求都会遇到的问题。不管是volley还是HttpUrlConnection 都会遇到,只是他们没有如Okhttp3这样考虑的这么细致。
目前Okhttp3已经更新到4.x了,对于新版本的网络请求,仍然沿用 Okhttp3的名字,毕竟大家已经熟悉了Okhttp3了。
网友评论