海安新闻网
当前位置:主页>国际新闻>
OkHttp拦截器 (四) ConnectInterceptor拦截器分析
来源:damugemaoyi.com  阅读量:552

一个:intercept()方法:

首先查看源代码:

可用参见intercept中的处理主要包括以下步骤:

1,从拦截器中获取流分配对象,并在第一个拦截器中创建RetryAndFollowUpInterceptor。执行StreamAlloction对象的newStream()方法,以创建一个用于处理编码请求和解码响应的HttpCodec;

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

第二,流分配分析

首先看新闻流:

主要创建了RealConnection对象(用于实际的网络输入输出传输)和HttpCodec对象(用于处理编码请求和解码响应),并返回了HttpCodec对象。

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

在findhealthconnection方法中获得的RealConnection对象是通过findConnection方法获得的。

以下是findconnection方法的分析

以上代码的主要作用是:

StreamAllocation的连接如果可以重用,就可以重用;

如果连接不能被重用,从连接池中获取RealConnection对象,如果成功返回;

如果没有连接池,new是一个RealConnection对象;

调用Realconnection的连接()方法来启动请求;

将RealConnection对象存储在连接池中,以便下次重用;

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

通过内部的get()方法从连接池中获取真正的连接对象。当它被存储时,put()方法被调用

内部是一个抽象类。它在OkHttpClient :

的静态代码块中定义了静态变量实例

instance的实例化。在这里,我们可以看到内部get()方法和put()方法实际上调用了连接池get()方法和put()方法

1:连接池get方法

连接池get方法

流分配get方法

流分配获取方法:

连接池Get方法摘要:

1。首先,从连接池中获得的RealConnection对象被分配给流分配成员变量连接;

2。创建一个StreamAllocationReference对象(对StreamAllocation对象的弱引用),

并将其添加到RealConnection的分配集合中。然后,您可以根据分配集合的大小来确定网络连接数是否超过OkHttp指定的数量。

2连接池连接池的put方法

put方法将连接RealConnection添加到连接池。添加之前执行清理任务。

?以下是cleanupRunnable

?cleanupRunnable方法主要调用cleanup来清理连接,而

cleanup()方法通过for循环遍历连接队列来记录具有最大空闲时间和最长空闲时间的连接。如果存在超过空闲保持活动时间的连接,或者空闲连接的数量超过了空闲连接的最大数量限制,则从连接中删除该连接,并最终执行关闭连接的操作。

4 : RealConnection

在上面的findConnection方法中创建新的RealConnection实例后,将调用RealConnection连接方法来建立连接

RealConnection连接方法:

?有两种连接,一种是隧道连接,另一种是普通连接?

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

让我们看看调用connectsocket的普通连接:(connect time out、readtimeout、call、event listener);

1: ConnectSocket(连接超时、读取超时、调用、事件侦听器)源代码如下:

Note Platform.get()。连接套接字(原始套接字,路由。SocketAddress(),连接超时)调用平台连接套接字

如下图所示平台连接套接字源:

最后调用java Socket连接方法来建立连接。

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

调用上述连接方法中的连接隧道(连接超时、读超时、写超时、调用、事件监听程序);

连接隧道()隧道链接

隧道创建方法创建隧道(),返回请求对象:

3,然后通过调用?connection()?该方法获取用于实际网络io传输的RealConnectIOn对象。

国产免费成人性视频|zuko中文字幕|一级成人小视频播放

友情链接:
海安新闻网 版权所有© www.damugemaoyi.com 技术支持:海安新闻网 | 网站地图