Problemas comunes relacionados con el código fuente de OKHttp

Análisis de código fuente OKHttp

https://www.jianshu.com/p/27c1554b7fee

Response getResponseWithInterceptorChain() throws IOException {
    // Build a full stack of interceptors.
    List<Interceptor> interceptors = new ArrayList<>();
    //在配置 OkHttpClient 时设置的 interceptors,放在第一位
    interceptors.addAll(client.interceptors());
    // 负责失败重试以及重定向
    interceptors.add(retryAndFollowUpInterceptor);
    // 桥拦截器,添加一些Header和移除一些header,例如body的contentLength是-1,则移除Content-Length这个header
    interceptors.add(new BridgeInterceptor(client.cookieJar()));
    // 负责读取缓存直接返回、更新缓存
    interceptors.add(new CacheInterceptor(client.internalCache()));
    // 负责和服务器建立连接
    interceptors.add(new ConnectInterceptor(client));
    if (!forWebSocket) {
    // 配置 OkHttpClient 时设置的 networkInterceptors
      interceptors.addAll(client.networkInterceptors());
    }
    // 负责向服务器发送请求数据、从服务器读取响应数据
    interceptors.add(new CallServerInterceptor(forWebSocket));

OkHttp análisis (1) Ver el principio del uso

https://www.jianshu.com/p/7b29b89cd7b5

OkHttp análisis (dos) conexión de red

https://www.jianshu.com/p/da071ad21b6d

 

Entrevista Essentials-Source Code Series OkHttp3

https://www.jianshu.com/p/7c2bb28ccac4

 

Explicación detallada de la configuración de la caché OKHTTP

https://blog.csdn.net/briblue/article/details/52920531

 

mecanismo de reutilización del grupo de conexiones okhttp

https://blog.csdn.net/tangjiean/article/details/51729371

Grupo de conexiones OkHttp3 y análisis del proceso de establecimiento de conexiones (parte 1)

https://sq.163yun.com/blog/article/188729834576564224

 

Okhttp3 interceptor: la diferencia entre el interceptor de aplicaciones y el interceptor de red

https://www.pianshen.com/article/7635452443/

En Okhttp3, los interceptores se dividen en interceptores de aplicaciones e interceptores de red. Hay una gran diferencia entre los dos. Al usarlos, debemos prestar atención para evitar problemas innecesarios causados ​​por un uso incorrecto. A continuación, explicaré las diferencias entre estos dos interceptores .

Primero observe el diagrama de flujo de ejecución de Okhttp, el proceso de ejecución del interceptor

ae7cdfa1be6930e31daac73a1555dc7d.png

Mira el diagrama de secuencia de ejecución del interceptor

2ef8645d62e839aee480a8940c2f1182.png

De acuerdo con las dos imágenes anteriores, podemos enumerar el diagrama de flujo de ejecución de Application Interceptor y Network Interceptor

7efce340c03d726ac4f8b3d43b3f2b98.png

Interceptor de aplicaciones:

  • No hay necesidad de preocuparse por si redirigir o no volver a conectar
  • El interceptor de aplicaciones solo se llamará una vez, incluso si los datos provienen de la caché
  • Solo considere la intención inicial de la aplicación, sin considerar el encabezado inyectado por Okhhtp como: if-None-Match, lo que significa que independientemente de otros factores externos, solo se considera el resultado final devuelto
  • Según la segunda imagen, podemos ver que el interceptor de aplicaciones personalizado es el primer interceptor en iniciar la ejecución, por lo que el significado de esta oración es que el interceptor de aplicaciones puede decidir si ejecutar otros interceptores, a través de Chain.proceed ().
  • Similar al significado de la oración anterior, puede ejecutar múltiples llamadas a otros interceptores a través de Chain.proceed ().

Bloqueador de red:

  • Según la tercera imagen, podemos entender que el significado de esta oración es que el interceptor de red puede operar el valor de retorno de la redirección y la reconexión fallida.
  • De acuerdo con la primera imagen, podemos ver que el significado de esta oración es que los datos en la caché no irán a Chain.proceed (), por lo que el interceptor de red no se puede ejecutar.
  • Significa que todos los datos transmitidos a través de la red se pueden observar a través del interceptor de red.
  • Según la segunda imagen, podemos ver que el interceptor que solicita la conexión del servicio se ejecuta antes que el interceptor de red, por lo que cuando se ejecuta el interceptor de red, se puede ver la información de conexión de la solicitud del servidor en la Solicitud, porque el interceptor de la aplicación no lo hace. Consíguelo. A la información de conexión correspondiente.

 

 

 

Supongo que te gusta

Origin blog.csdn.net/cpcpcp123/article/details/115249049
Recomendado
Clasificación