14
* OkHttp 简简

introduce Okhttp

  • Upload
    -

  • View
    219

  • Download
    4

Embed Size (px)

Citation preview

Page 1: introduce Okhttp

*

OkHttp简介

Page 2: introduce Okhttp

特点OkHttp是一个高效的 HTTP库 :

1、支持 http、 SPDY、 http2.0、 websocket协议。2、通过连接池和 SPDY、 http2.0的共享 socket提高网络性能。3、连接恢复。4、实现了 HttpURLConnection 和 Apache HTTP Client接口。5、组件式。单独的功能独立出来。

Page 3: introduce Okhttp

请求流程图

Page 4: introduce Okhttp
Page 5: introduce Okhttp

几个主要的类0.OkHttpClient: OkHttp的 Context.

1.Route.java: The concrete route used by a connection to reach an abstract origin server.

2.Platform.java: Access to platform-specific features.

3.Connnection.java: The sockets and streams of an HTTP, HTTPS, or HTTPS+SPDY connection.

4.ConnnectionPool.java:Manages reuse of HTTP and SPDY connections for reduced network latency. 

Page 6: introduce Okhttp

5.Request.java

6.Response.java

7.Call.java

8.Dispatcher.java: Each dispatcher uses an ExecutorService to run calls internally

9.HttpEngine.java: sendRequest()、 readResponse()

10. Interceptor:拦截器11.Cache.java:实现 http缓存机制

Page 7: introduce Okhttp

同步与异步同步请求:Call.java#public Response execute() throws IOException {}

异步请求:Call.java#public void enqueue(Callback responseCallback) {}

关键类 :Dispatcher.java(使用 java线程池ExecutorService.java)

Page 8: introduce Okhttp

连接池1、低延迟。 tcp三次握手, tls握手。2、高吞吐量。 tcp slow start。3、节省电量。Wifi、 G网络特点。理论上每个 host最大打开 socket个数=

maxRequestPerHost

Page 9: introduce Okhttp

OkIo

Page 10: introduce Okhttp

retrofitretrofit使用 OkHttp;Retrofit2.0支持请求取消。

Page 11: introduce Okhttp

Test之MockWebServerhttps://github.com/square/okhttp/tree/master/mockwebserver

缺点:需要替换所有的 BaseUrl。

Page 12: introduce Okhttp

Test之 Interceptor通过 Interceptor,拦截 Request,返回MockResponse。

Page 13: introduce Okhttp

ALPN( Android5.0+支持)ALPN (Application Layer Protocol Negotiation)。

现有的 SPDY 协议都是跑在 HTTPS 的 443 端口上的, client和 server 在 SSL 协商完成之后, server并不知 道你是要使用 HTTP 还是 SPDY 协议,因此需要在进行

SSL 协商的同时,将上层的应用层协议给协商出来。由于 http upgrade header增加网络延迟和兼容问题,所以使用 NPN或者 ALPN,不过 TLS工作组、 okhttp都选择支持ALPN。参考 :NPN/ALPN、 no more NPN。

Page 14: introduce Okhttp

ALPN协商步骤1 、客户端通过 ALPN 扩展将自己支持的应用层协议发送给服务端;2 、服务端选择其中某个协议,并将结果通过 ALPN 扩展发送给客户端;3、 TLS 协商完成后进行正常通讯。