- 2、同时,这个本地server1会与另外一个本地server2(ChromeDevtoolsServer)连接着。
- 3、本地app一旦连接上,数据将会不停的被发送到本地server1,然后转由server2.
- 4、然后Chrome Developer Tools,想访问网站一样的,访问了ChromeDevtoolsServer,随之将数据友好的展示给了开发者,这么一个过程就此完结。
- 整个网络请求主要分为几个步骤,而整个请求的耗时可以细分到每一个步骤里面。
- DNS 解析。通过 DNS 服务器,拿到对应域名的 IP 地址。在这个步骤,比较关注 DNS 解析耗时情况、运营商 LocalDNS 的劫持、DNS 调度这些问题。
- 创建连接。跟服务器建立连接,这里包括 TCP 三次握手、TLS 密钥协商等工作。多个 IP/ 端口该如何选择、是否要使用 HTTPS、能否可以减少甚至省下创建连接的时间。
- 发送 / 接收数据。在成功建立连接之后,就可以愉快地跟服务器交互,进行组装数据、发送数据、接收数据、解析数据。思考一下,如何根据网络状况将带宽利用好,怎么样快速地侦测到网络延时,在弱网络下如何调整包大小等问题。
- 关闭连接。连接的关闭看起来非常简单
03.Android中应用
- 应用代码如下所示
new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build()
- 那么既然网络请求添加StethoInterceptor,既可以拦截网络请求和响应信息,发送给Chrome。那么能不能自己拿来用……
- 可以的
- StethoInterceptor大概流程
- 整个流程我们可以简化为:发送请求时,给Chrome发了条消息,收到请求时,再给Chrome发条消息(具体怎么发的可以看NetworkEventReporterImpl的实现)
- 两条消息通过EventID联系起来,它们的类型分别是OkHttpInspectorRequest 和 OkHttpInspectorResponse,两者分别继承自NetworkEventReporter.InspectorRequest和NetworkEventReporter.InspectorResponse。
- 我们只要也继承自这两个类,在自己的网络库发送和收到请求时,构造一个Request和Response并发送给Chrome即可。
- 如何拿来用
- 既然Android中使用到facebook的stetho库,可以拦截手机请求请求,然后去Chrome浏览器,在浏览器地址栏输入:chrome://inspect 。即可查看请求信息。
- 那么能不能把这个拿到的请求信息,放到集合中