IT评测·应用市场-qidao123.com

标题: OkHttp3 - 2. OkHttp的焦点组件与架构 [打印本页]

作者: 泉缘泉    时间: 2024-12-23 11:22
标题: OkHttp3 - 2. OkHttp的焦点组件与架构
1 OkHttp的工作原理

OkHttp3 的焦点设计遵循以下原则:
工作流程图

2 焦点类和接口剖析

OkHttp3 的焦点组件如下:
1. OkHttpClient

OkHttpClient 是 HTTP 客户端的焦点类,用于管理请求和连接设置。
主要功能

代码示例
  1. OkHttpClient client = new OkHttpClient.Builder()
  2.         .connectTimeout(10, TimeUnit.SECONDS)
  3.         .readTimeout(30, TimeUnit.SECONDS)
  4.         .writeTimeout(10, TimeUnit.SECONDS)
  5.         .build();
复制代码
** Request**

Request 是 HTTP 请求的抽象,包含 URL、方法、Header、Body 等信息。
代码示例
  1. Request request = new Request.Builder()
  2.         .url("https://jsonplaceholder.typicode.com/posts")
  3.         .get() // 默认是 GET 请求
  4.         .addHeader("User-Agent", "OkHttp Example")
  5.         .build();
复制代码
3. Call

Call 是对一次请求的封装,可以执行同步或异步操作。
代码示例
  1. Call call = client.newCall(request);
复制代码
4. Response

Response 表示 HTTP 响应,包含状态码、Header、响应体等信息。
代码示例
  1. Response response = call.execute(); // 同步调用
复制代码
5. Interceptor

拦截器用于在请求发送和响应返回时插入自定义逻辑。
常见用途

代码示例
  1. client = new OkHttpClient.Builder()
  2.         .addInterceptor(chain -> {
  3.             Request original = chain.request();
  4.             Request modified = original.newBuilder()
  5.                     .addHeader("Authorization", "Bearer token")
  6.                     .build();
  7.             return chain.proceed(modified);
  8.         })
  9.         .build();
复制代码

3 同步与异步请求机制

OkHttp3 支持同步和异步两种请求方式:
1. 同步请求

同步请求在当火线程执行,调用 Call.execute() 方法,线程将被阻塞直到响应返回。
代码示例
  1. try (Response response = client.newCall(request).execute()) {
  2.     System.out.println(response.body().string());
  3. } catch (IOException e) {
  4.     e.printStackTrace();
  5. }
复制代码
** 异步请求**

异步请求在独立线程中执行,调用 Call.enqueue() 方法,结果通过回调处理。
代码示例
  1. call.enqueue(new Callback() {
  2.     @Override
  3.     public void onFailure(Call call, IOException e) {
  4.         e.printStackTrace();
  5.     }
  6.     @Override
  7.     public void onResponse(Call call, Response response) throws IOException {
  8.         if (response.isSuccessful() && response.body() != null) {
  9.             System.out.println(response.body().string());
  10.         }
  11.     }
  12. });
复制代码
同步与异步对比

特性同步调用异步调用调用方式阻塞非阻塞使用场景简单的单线程应用多线程或高并发场景难度易于实现需实现回调逻辑
4 Dispatcher与线程调度

Dispatcher 的作用


默认设置与修改

默认情况下,OkHttp 的最大并发请求数为 64,总主机最大请求数为 5。可以通过 Dispatcher 自定义这些限定:
  1. Dispatcher dispatcher = new Dispatcher();
  2. dispatcher.setMaxRequests(128);
  3. dispatcher.setMaxRequestsPerHost(10);
  4. OkHttpClient client = new OkHttpClient.Builder()
  5.         .dispatcher(dispatcher)
  6.         .build();
复制代码
监控请求队列状态

Dispatcher 提供方法获取正在运行和等候的请求信息:
  1. System.out.println("正在运行的请求数: " + dispatcher.runningCallsCount());
  2. System.out.println("等待队列中的请求数: " + dispatcher.queuedCallsCount());
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4