前言
该拦截器的作用就是使用上一个ConnectInterceptor开辟的I/O窗口,通过这个窗口向Socket管道内读取/写入数据。然后将服务器的响应构建为一个Response返回,最后根据Connection头信息判断需不需要关闭连接
过程
- 如果该请求带有
Body,则会检测请求中有没有Expect:100-continue头信息,如果有则仅仅发送头信息,待服务器返回响应确认可以发送body后,才会接着发送body - 判断需不需要分块发送
- 读取响应,构建Response
- 判断需不需要关闭连接
问题
- Socket管道什么打开的,什么时候关闭的?
Socket管道在新建连接时(
ConnectionInterceptor)打开,在清理连接池(RealConnectionPool)时,如果Socket超过限制的时长,就会被关闭。会有一个专门的线程(线程池中获取)负责清理工作。当连接池中的第一个连接被创建时,这个线程就被创建了。注意,并不是在CallServerInterceptor中关闭的,CallServerInterceptor只是标示了当前的连接不能再开辟I/O窗口,等待被清理
本文详细解析了OkHttp中ConnectInterceptor的工作原理,包括如何利用I/O窗口进行数据读写、处理带Body的请求、响应构建及连接管理等关键步骤。
2150

被折叠的 条评论
为什么被折叠?



