网络框架总结

HttpUrlConnetction

该协议是对网络请求这个过程的包装。

从协议的解析到TCP的连接,以及tcp连接的缓存,整个过程就是应用层到网络层的一次网络请求过程,

Okhttp
1.基本用法
异步/同步请求
2.原理
一个网络请求最必要的两部分是请求(Request)和返回结果(Response)
任何网络请求框架都是对这两个过程的包装,是网络请求变得更加简单和智能

特性:
1.缓存策略
缓存的是什么?Response
2.任务队列
线程池/消费者生产者模型
内部维护任务队列线程池,友好支持并发访问

3.多路复用的优化(即:HTTP2)
痛点:使用socket创建网络连接的缺点:时间久(三次握手),开销大,同时网络请求是频繁的,碎片化的
优化点:内置连接池,支持连接复用,减少延迟
实现原理:HTTP2所有性能增强的核心在于新的二进制分帧层,它定义了如何封装HTTP消息并在客户端与服务器之间进行传输,类似与多进程下的时间分片机制
多路复用:多路复用场景下一个address只需要一个连接,基于这个连接可以有多个“请求和响应对”即:StreamAllocation,这些请求响应对可以并行发生,然后通过组装帧来生成消息
连接池:OkHttp的连接池通过计数+标记清理的机制来管理连接池,使得无用连接可以被会回收,并保持多个健康的keep-alive连接。这也是OkHttp的连接池能保持高效的关键原因。多路复用的理论依据是:http2二进制分帧 具体实现是通过管理连接池来达到复用

4.拦截器
设计思想:将网络请求和响应的整个过程,贯穿在一系列拦截器中,每个拦截器都有自己明确的职责。okhttp对网络请求的优化也是体现在拦截器责任链中。
设计模式:责任链
一次网络请求和响应是贯穿了整个系列的拦截器。每个拦截器都是对Request和Response的优化处理。重试/压缩/缓存/连接池等都是一个个拦截器完成的。

灵感:基本所有优化的点都是从复用,压缩等角度考虑,不管是线程池还是http2多路复用机制

5.retrofit

核心是动态代理

https://blog.csdn.net/u011784767/article/details/78281384

6.rxjava

1.rx java

观察者模式本身的目的就是『后台处理,前台回调』的异步机制,

被动观察者方式:可以节省资源,当被观察者发生变化的时候主动通知观察者

基本用法
1.创建观察者:当事件发生时有怎么样的行为
2.创建被观察者:决定什么时候触发事件及触发怎么的事件
3.事件的传递方向:由被观察者向观察者传递


实现线程切换
subscribeOn:指定事件产生的线程
observeOn:指定事件消费的线程
Scheduler:RxJava用来控制线程切换的
默认情况:RxJava遵循哪个线程产生就在哪个线程消费的原则
IoScheduler:切换到io线程,该Scheduler维护这一个线程池,执行具体任务

 

一句话总结RxJava子线程和主线程的原理

切换到子线程的关键是将Runnable放到线程池去执行,切换到主线程是利用在主线程实例化的Handle发送Message,让runnable回调到主线程去。

参考:

https://yq.aliyun.com/articles/78105?spm=a2c4e.11153940.blogcont78105.11.5ec25d133D4imk

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章