OkHttp3源码(一) ------ OkHttpClient

关于OkHttp3之前用的时候没有考虑过它的内部实现过程,今天在这里整理记录一下。
接下来我会将OkHttpClient类中常用的方法,内部类、字段加上自己理解的注释,通过看注释了解OkHttpClient的主要用途。

public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory {
   
    //OkHttp默认支持的协议Http1.1和OkHttp2
    static final List<Protocol> DEFAULT_PROTOCOLS = Util.immutableList(
            Protocol.HTTP_2, Protocol.HTTP_1_1);
    //默认的连接规则
    static final List<ConnectionSpec> DEFAULT_CONNECTION_SPECS = Util.immutableList(
            ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT);
    static {
        /*这个类对象的主要用途是操作连接池类,这样做保证了唯一性。*/
        Internal.instance = new Internal() {
            //设置OkHttpClient的内部缓存
            @Override public void setCache(OkHttpClient.Builder builder, InternalCache internalCache) {
                builder.setInternalCache(internalCache);
            }
            //连接池判断指定的连接是否空闲,如果空闲则清除指定连接,否则扫描连接池有无到期的空闲连接。
            @Override public boolean connectionBecameIdle(
                    ConnectionPool pool, RealConnection connection) {
                return pool.connectionBecameIdle(connection);
            }
            //获得连接池中和本次连接的URL相同的连接
            @Override public RealConnection get(ConnectionPool pool, Address address,
                                                StreamAllocation streamAllocation, Route route) {
                return pool.get(address, streamAllocation, route);
            }
            //比较两个地址的非主机部分(DNS、协议、连接规则等)
            @Override public boolean equalsNonHost(Address a, Address b) {
                return a.equalsNonHost(b);
            }
            //主要针对HTTP2的多路复用,复用连接池中是Http2的连接并且要符合address要求。
            @Override public Socket deduplicate(
                    ConnectionPool pool, Address address, StreamAllocation streamAllocation) {
                return pool.deduplicate(address, streamAllocation);
            }
            //将连接放入连接池,并扫描连接池有无到期的空闲连接
            @Override public void put(ConnectionPool pool, RealConnection connection) {
                pool.put(connection);
            }
            //获得相应码
            @Override public int code(Response.Builder responseBuilder) {
                return responseBuilder.code;
            }
            //构造HttpUrl,构造方式是检查URL有无语法错误,有则抛出异常,没有则肢解URL给HttpUrl。
            @Override public HttpUrl getHttpUrlChecked(String url)
                    throws
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值