okHttp3连接池简单使用

一、概述:

HTTP是现代应用网络的方式。这就是我们交换数据和媒体的方式。有效地执行HTTP可以加快您的负载并节省带宽。
OkHttp是一个默认有效的HTTP客户端:
1.HTTP / 2支持允许对同一主机的所有请求共享套接字。
2.连接池减少了请求延迟(如果HTTP / 2不可用)。
3.透明GZIP缩小了下载大小。
4.响应缓存完全避免网络重复请求。
当网络很麻烦时,OkHttp坚持不懈:它将从常见的连接问题中无声地恢复。如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。OkHttp启动具有现代TLS功能(SNI,ALPN)的新连接,并在握手失败时回退到TLS 1.0。
使用OkHttp很简单。它的请求/响应API采用流畅的构建器和不变性设计。它支持同步阻塞调用和带回调的异步调用。
OkHttp支持Android 2.3及更高版本。对于Java,最低要求是1.7
引自官方网站:okhttp官网

二、简单使用:

1.导入jar包
 
 com.squareup.okhttp3
 okhttp
 3.11.0
 
2.使用步骤
  1. 创建okHttp单例

    采用枚举的方式创建线程安全的okHttpClient单例

 * Description :
 * 获取okHttpClient单例
 * @author : Jeason
 * @date : Created in 2018/10/25 11:16
*/
​
public enum OkHttpClientObject {
 CLIENT;

 private OkHttpClient clientInstance;
​
 private Integer connectTimeout_time = 10;
 private Integer writeTimeout_time = 10;
 private Integer readTimeout_time = 30;
​
 OkHttpClientObject() {
 clientInstance = new OkHttpClient.Builder()
 .connectTimeout(connectTimeout_time, TimeUnit.SECONDS)
 .writeTimeout(writeTimeout_time, TimeUnit.SECONDS)
 .readTimeout(readTimeout_time, TimeUnit.SECONDS)
 .retryOnConnectionFailure(true)
 .build();
 }
​
 public OkHttpClient getClientInstance() {
 return clientInstance;
 }
}
  1. 获取okHttpClient实例
private final OkHttpClient client = (OkHttpClient) OkHttpClientObject.CLIENT
                    .getClientInstance();
  1. 创建request请求
//创建请求
Request request = new Request.Builder()
.header("User-Agent", "*****")
.addHeader("Accept", "*****")
.url(url)
.get()
.build();
  1. 发起请求,分为同步和异步两种方式
//同步执行请求,将响应结果存放到response中
Call call = client.newCall(request);
Response response = call.execute();
​
//异步请求
Call call = client.newCall(request);
call.enqueue(new Callback() {
 @Override
 public void onFailure(Call call, IOException e) {
 System.out.println("请求失败");
 }
​
 @Override
 public void onResponse(Call call, Response response) throws IOException {
 System.out.println(response.body().string());
 }
});
demo代码:
public class OkHttpClientDemo {
 //json传输方式
 private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
​
 //获取okHttpClient对象
 private final OkHttpClient client = (OkHttpClient) OkHttpClientObject.CLIENT
 .getClientInstance();

 private String result;
​
 /**
 * get形式,同步执行
 */
 public String get(String url) throws IOException {
 //创建请求
 Request request = new Request.Builder()
 .header("User-Agent", "*****")
 .addHeader("Accept", "*****")
 .url(url)
 .build();
 //同步执行请求,将响应结果存放到response中
 Call call = client.newCall(request);
 Response response = call.execute();
​
 if (response.isSuccessful()) {
 //处理response的响应消息
 return response.body().string();
 } else {
 throw new IOException("Unexpected code " + response);
 }
 }
​
 /**
 * post形式
 */
 public String post(String url, String message) throws IOException {
 //请求体传输json格式的数据
 RequestBody requestBody = RequestBody.create(JSON, message);
 //创建请求
 Request request = new Request.Builder()
 .url(url)
 .header("User-Agent", "*****")
 .addHeader("Accept", "*****")
 .post(requestBody)
 .build();
​
 //同步请求
​
 Call call = client.newCall(request);
 Response response = call.execute();
​
 if (response.isSuccessful()) {
 return response.body().string();
 } else {
 throw new IOException("Unexpected code " + response);
 }
 }
​
 /**
 * 异步发起请求
 */
 public void pool(String url) {
 //创建请求
 Request request = new Request.Builder()
 .url(url)
 .build();
​
 //异步请求
 Call call = client.newCall(request);
 call.enqueue(new Callback() {
 @Override
 public void onFailure(Call call, IOException e) {
 System.out.println("请求失败");
 }
​
 @Override
 public void onResponse(Call call, Response response) throws IOException {
 System.out.println(response.body().string());
 }
 });
 }

}

参考文章:

  1. https://square.github.io/okhttp/3.x/okhttp/

  2. https://juejin.im/entry/5728441d128fe1006058b6b9

  3. https://blog.csdn.net/ahjxly/article/details/76460315

最后,欢迎关注我的小公众号

关注公众号,后台回复 "福利" 二字,分享一些不错的编程视频。

okHttp3连接池简单使用_第1张图片
公众号

你可能感兴趣的:(okHttp3连接池简单使用)