快捷建站专家,长沙县星沙人才招聘网,微站网站,比较好的建立站点#x1f604;作者简介#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️#xff0c;主要职责#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方#xff0c;还请大家指正#xff0c;让我们一起学习#xff0c;一起进步。 #x1f60a; 座右铭#xff1a;不… 作者简介 小曾同学.com,一个致力于测试开发的博主⛽️主要职责测试开发、CI/CD 如果文章知识点有错误的地方还请大家指正让我们一起学习一起进步。 座右铭不想当开发的测试不是一个好测试✌️。 如果感觉博主的文章还不错的话还请点赞、收藏哦 请求超时配置
在 OkhttpClient 中有默认的一些配置比如连接池、超时时间、写入时间、读取时间等。我们可以通过查看OkhttpClient源码得知。 默认配置如下
连接超时时间默认为10秒写入超时时间默认为10秒读取超时时间默认为10秒Follow Redirects重定向默认为 true即会自动遵循重定向连接池大小默认为5个重试次数默认为0即 不会自动重试请求。 但是默认配置不能满足日常需要如何进行自定义呢可使用 OkHttpClient.Builder() 来定制化配置。具体如下
ConnectionPool connectionPool new ConnectionPool(5,5, TimeUnit.MINUTES);
OkHttpClient client new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS) //连接超时时间.writeTimeout(30,TimeUnit.SECONDS) //设置写入超时时间.readTimeout(30,TimeUnit.SECONDS).followRedirects(false) //禁用重定向.connectionPool(connectionPool).build();使用 OkHttpClient.Builder() 构建 OkHttpClient 对象并且可以通过调用 builder 的方法来配置 OkHttpClient。 上述我们还定制化了连接池
// 创建一个连接池最大空闲连接数为5每个连接最大保持时间为5分钟
ConnectionPool connectionPool new ConnectionPool(5,5, TimeUnit.MINUTES);maxIdleConnections最大空闲连接数。keepAliveDuration连接保持时间。
OkHttp 会自动管理连接池中的连接根据需要重用已经存在的连接或创建新的连接。连接池会根据连接的空闲时间来关闭不再需要的连接以节省资源。
重连机制
在 Okhttp 中不直接提供内置的重连机制可以通过自定义Interceptor 来实现请求失败时的重试逻辑这块涉及到拦截器的应用具体使用如下
package com.qiniu.interceptortest;
import androidx.annotation.NonNull;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import okhttp3.*;public class ReConnectionTest {public static void main(String[] args) {OkHttpClient client new OkHttpClient.Builder().addInterceptor(new RetryInterceptor(3)).build();//创建请求Request request new Request.Builder().url(http://www.baidu.com).build();// 使用 OkHttpClient 实例来发送请求并处理响应。client.newCall(request).enqueue(new Callback() {Overridepublic void onFailure(NotNull Call call, NotNull IOException e) {System.out.println(Request failed: e.getMessage());}Overridepublic void onResponse(NotNull Call call, NotNull Response response) throws IOException {// 处理响应数据if (response.isSuccessful()) {String responseData response.body().string();System.out.println(responseData);// 处理响应数据} else {// 处理失败响应}}});}static class RetryInterceptor implements Interceptor{private int maxRetries;private int retryCount 0;public RetryInterceptor(int maxRetries) {this.maxRetries maxRetries;}NonNullOverridepublic Response intercept(NonNull Chain chain) throws IOException {Request request chain.request();Response response chain.proceed(request);while (!response.isSuccessful() retryCount maxRetries){retryCount;response chain.proceed(request);}return response;}}
}通过拦截器来实现重连机制拦截器用于在发送请求和接收响应的过程中拦截、修改和处理请求和响应数据。拦截器允许开发人员在网络请求的不同阶段介入并对请求和响应进行各种操作如修改请求头、记录日志、重试请求、添加认证信息等。 人生像一部电影有些人就像弹出来的广告