zoukankan      html  css  js  c++  java
  • OkHttp梳理

    OkHttp梳理

    OkHttp的使用

    • 添加依赖

    • 基本代码

      class Util{
          public static void sendRequest(String url, Callback callback) {
              RequestBody requestBody = new FormBody.Builder()
                      .add("key","content")
                      .build();
              Request request = new Request.Builder()
                      .url(url)
                      .build();
              OkHttpClient client = new OkHttpClient();
              client.newCall(request).enqueue(callback);//异步请求的方式
              //同步请求方式则是调用execute方法,并且有Response类型的返回值。
          }
      }
      

    OkHttp的原理

    • OkHttp子系统层级结构

      • 网络配置层
      • 重定向层
      • Header拼接层
      • HTTP缓存层
      • 网络连接层
      • 数据响应层
    • 五个默认拦截器

      • RetryAndFollowUpInterceptor(重试重定向拦截器)

        当请求内部抛出异常的时候,判定是否需要重试;当响应结果是3xx重定向的时候,决定是否构建一个新的请求并发送请求。

      • BridgeInterceptor(连接桥拦截器)

        负责把用户构造的请求转换为发送到服务器的请求 ,转换的过程就是添加一些服务端需要的header信息;以及把服务器返回的响应转换为用户友好的响应,是从应用程序代码到网络代码的桥梁。在Request阶段配置用户信息,并添加一些请求头。在Response阶段,进行gzip解压。

      • CacheInterceptor(缓存拦截器)

        负责读取缓存以及更新缓存。

      • ConnectInterceptor(连接拦截器)

        负责和服务器建立连接,这里才是真正的请求网络。同时负责了Dns解析和Socket连接(包括tls连接)。

      • CallServerInterceptor(请求服务拦截器)

        执行流操作(写出请求体、获得响应数据) ,负责向服务器发送请求数据,从服务器读取响应数据,进行HTTP请求报文的封装与响应报文的解析。它是最后一个拦截器了,前面的拦截器已经完成了socket连接和tls连接,那么这一步就是传输HTTP的头部和body数据了。以及读取 response header,先构造一个 Response 对象,如果有 response body,就在 response header 的基础上加上 body 构造一个新的 Response 对象。

    • 连接机制

      • 创建连接
      • 连接池

    涉及的设计模式

    • 建造者模式

      网络配置层,利用Builder模式配置各种参数。

    • 工厂方法

    • 职责链模

      一个Interceptor对应一个功能,所有Interceptor连接成一个Interceptor.Chain,典型的责任链模式实现。

    参考:

    OPPO互联网基础技术团队-OkHttp源码深度解析

    郭孝星-Android开源框架源码鉴赏:Okhttp

    Andriod 网络框架 OkHttp 源码解析

  • 相关阅读:
    Handling Touches
    Learn the Basics
    Getting started
    (dev mode) install CONSUL on ubuntu
    Resilience4j usage
    spring cloud gateway
    courator
    courator
    js 获取服务器控件
    js
  • 原文地址:https://www.cnblogs.com/chen-ying/p/12341421.html
Copyright © 2011-2022 走看看