其他分享
首页 > 其他分享> > OkHttp & Retrofit

OkHttp & Retrofit

作者:互联网

OkHttp

高效网络框架 is a http client from Square
0、公司 : Square
1、http/2 supports allows all request to the same host to share a socket.
2、connection pooling
3、gzip
4、Response caching for repeat requests
5、using OkHttp is easy
支持 spdy、http2.0、websocket 等协议
支持同步、异步请求
封装了线程池,封装了数据转换,提高性能。

Builder模式

拦截器 - 责任链模式

整个过程像工厂流水线一样,传递用户发起的请求 Request,每一个拦截器完成相应的功能,从失败重试和重定向实现、请求头的修改和Cookie 的处理,缓存的处理,建立 TCP 和 SSH 连接,发送 Request 和读取 Response,每一个环节由专门的 Interceptor 负责。


class LoggingInterceptor implements Interceptor {

  @Override public Response intercept(Interceptor.Chain chain) throws IOException {
    Request request = chain.request();

    long t1 = System.nanoTime();
    logger.info(String.format("Sending request %s on %s%n%s",
        request.url(), chain.connection(), request.headers()));
    // 主要方法 Intercept。会传递一个 Chain 对象过来,可以在 Chain 在执行 proceed 的前后添加代码
    Response response = chain.proceed(request);

    long t2 = System.nanoTime();
    logger.info(String.format("Received response for %s in %.1fms%n%s",
        response.request().url(), (t2 - t1) / 1e6d, response.headers()));

    return response;
  }
}

双任务队列

手动推进队列循环,而不是while循环 节省了资源

Dispather ayncCall

  • AsyncCall - Runnable

image

应该是单例的OkHttpClient

所有的 HTTP 在进行请求的时候都要使用这一个 Client 。因为每个 OkHttpClient 都对应了自己的连接池和线程池。减少使用连接池和线程池可以减少延迟和内存的使用。相反的如果每个请求都创建一个 OkHttpClient 的话会很浪费内存资源。

OkHttpClient 有三个创建方法

public final OkHttpClient = new OkHttpClient.Builder()
  .addInterceptor(new HttpLoggingInterceptor())
  .cache(new Cache(cacheDir,cacheSize))
  .等等配置
  .build();
   OkHttpClient agerClient = client.newBuilder()
  .readTimeout(500,TimeUnit.MILLSECONS)
  .build();

这种方法的好处就是,当我们有一个特殊的请求,有的配置有点不一样,比如要求连接超过 1 s 就算超时,这个时候我们就可以使用这个方法来生成一个新的实例对象,不过他们共用很多其他的资源,不会对资源造成浪费。

关于 OkHttpClient 的配置改变都在 Builder 中进行

Retrofit

对OkHttp进行了封装


@GET,POST ..
@FormUrlEncoded
@Mutilpart

@FieldMap
@Query
@Body

Retrofit + Hilt + RxJava

标签:请求,chain,request,Retrofit,OkHttp,OkHttpClient,response
来源: https://www.cnblogs.com/skystarry/p/14993484.html