一、概述:

HTTP是现代应用网络的方式。这就是我们交换数据和媒体的方式。有效地执行HTTP可以加快您的负载并节省带宽。

OkHttp是一个默认有效的HTTP客户端:

  • HTTP / 2支持允许对同一主机的所有请求共享套接字。
  • 连接池减少了请求延迟(如果HTTP / 2不可用)。
  • 透明GZIP缩小了下载大小。
  • 响应缓存完全避免网络重复请求。

当网络很麻烦时,OkHttp坚持不懈:它将从常见的连接问题中无声地恢复。如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。OkHttp启动具有现代TLS功能(SNI,ALPN)的新连接,并在握手失败时回退到TLS 1.0。

使用OkHttp很简单。它的请求/响应API采用流畅的构建器和不变性设计。它支持同步阻塞调用和带回调的异步调用。

OkHttp支持Android 2.3及更高版本。对于Java,最低要求是1.7

引自官方网站:okhttp官网

二、简单使用:

1.导入jar包
 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.11.0</version></dependency>
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() {@Overridepublic void onFailure(Call call, IOException e) {System.out.println("请求失败");}@Overridepublic 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() {@Overridepublic void onFailure(Call call, IOException e) {System.out.println("请求失败");}@Overridepublic 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——连接池

    连接池 每次Request都创建新的Http连接,容易浪费资源和时间,TCP3次握手,断开连接要2次或4次挥手.Http1.0中有Keep-Alive用来保持连接,在一定时间范围内,相同的请求复用旧连 ...

  2. java 连接池_初探数据库连接池

    参考资料 数据库连接池学习笔记(一):原理介绍+常用连接池介绍 java数据库连接池实现原理 高性能数据库连接池的内幕 1. 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户 ...

  3. 线程池的原理和连接池的原理

    线程池的原理: 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡 眠状态,当客户端有一个新请求时,就会唤 ...

  4. 数据库连接池原理及常用连接池介绍

    一.背景介绍 1.1 什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个. 1.2 为什么要使用连接池 数据库连接是一种关键的有 ...

  5. java构建内存池队列_池化技术(线程池、连接池、内存池等)

    一.池化技术 - 简单点来说,就是提前保存大量的资源,以备不时之需. 对于线程,内存,oracle的连接对象等等,这些都是资源,程序中当你创建一个线程或者在堆上申请一块内存时,都涉及到很多系统调用,也 ...

  6. jsp获取连接池的实时连接数_一篇看懂数据库连接池概念、原理、运行机制

    概述 数据库连接池是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个.那么其中的运行机制又是怎样的呢?今天主要介绍一下数据库连接池原理和常用的连接池. ...

  7. 001-http-总览、文件配置、常用http client、http连接池

    一.概述 http请求项目搭建:地址:https://github.com/bjlhx15/common-study.git 中的common-http 主要针对post请求中的,form表单[app ...

  8. 德鲁伊连接池(druid)

    文章目录 一.连接池 1.什么是连接池 2.为什么要用连接池 二.德鲁伊连接池(druid) 1.介绍 2.代码实操 一.连接池 1.什么是连接池 简单来说就是一组连接组成的一个池子(集合),称为连接 ...

  9. 数据库连接池学习笔记(一):原理介绍+常用连接池介绍

    什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个. 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户 ...

最新文章

  1. cefsharp wpf 中文输入问题解决方法
  2. MongoDB复制集与Raft协议异同点分析
  3. OpenCV点分类器points classifier的实例(附完整代码)
  4. java udp 缓冲区_为什么特定的UDP消息总是低于特定的缓冲区大小?
  5. python【进阶】4.文本和字节序列
  6. python运算符中用来计算整商的是什么_零基础学python,看完这篇文章,你的python基础就差不多了...
  7. 【数据分析就业实战】——缺失值的常见处理方法
  8. 你最大的敌人是自己:一个独立游戏人的创业自白
  9. angular读取html文件路径,angular中关于路径问题的详解
  10. C语言 简单的在线电子词典
  11. D3js-中国各主要大城市经纬度数据
  12. c语言中ab代表什么,有些基金名称中含有AB或者C是什么意思,有什么区别的呢?...
  13. 手机无线连接到电脑共享文件
  14. 2019年IT行业的十大热门岗位
  15. Big Sur + karabiner + kernelmanagerd = 可能发烫
  16. A级学科计算机技术,全国学科评估结果出炉 四川高校这些学科进入全国A档
  17. hadoop-ykt(自定义key)
  18. 2012二级c语言上机,2012全国计算机等级考试-二级C语言-上机考试-填空题-分类总结...
  19. Android色彩特效处理之色调、饱和度、亮度、ColorMatrix精炼详解
  20. 下载文件提示【SmartScreen筛选器已阻止了下载】,处理方法

热门文章

  1. _如何在 Linux 上安装 Minecraft 服务器
  2. mfc 如何将cstring转byte_如何将PDF转成JPG?PDF转图片的技巧
  3. python js 效率_Python,Node.js 哪个比较适合写爬虫?
  4. python的基础_毫无基础的人如何入门 Python ?
  5. 算法学习——枚举之最简真分数
  6. 对Python的认识以及以及Python变量简单的数据类型总结
  7. 创建向导时为其添加path,指为jar添加到path里面
  8. C语言/ 运算符的优先级以及结合方向
  9. Asp.net WebForm使用codeFirst建立和修改数据库小结
  10. BZOJ 1599: [Usaco2008 Oct]笨重的石子( 枚举 )