-
okhttp原理
okhttp主要实现了异步、同步的网络操作,创建了不同的call对象,这里的call对象是一个个的runnable对象,由于我们的任务是很多的,因此这里有Dispatcher包装了线程池来处理不同的call,其中该类中创建了三种队列,分别用于存放正在执行的异步任务,同步队列,以及准备的队列。最后在执行每个任务的时候,采用队列的先进先出原则,处理每一个任务,都是交给了后面的各种拦截器来处理,有请求准备的拦截器、缓存拦截器、网络连接的拦截器,每一个拦截器组成了一个责任链的形式。到最后返回response信息。
OkHttp的底层是通过Java的Socket发送HTTP请求与接受响应的(这也好理解,HTTP就是基于TCP协议的),但是OkHttp实现了连接池的概念,即对于同一主机的多个请求,其实可以公用一个Socket连接,而不是每次发送完HTTP请求就关闭底层的Socket,这样就实现了连接池的概念。而OkHttp对Socket的读写操作使用的OkIo库进行了一层封装。
-
okhttp框架优点:
- 高性能的http库,支持ip切换、url重试、线程管理、缓存管理、连接复用等。
- 支持HTTPS/HTTP2/WebSocket(服务器可主动推送消息)
- 内部维护任务队列线程池,友好支持并发访问
- 内部维护连接池,支持多路复用,减少连接创建开销
- 提供拦截器链,实现request和response的分层处理
- Okio提供超时机制
- Socket创建支持最佳路由