HttpClient和OkHttp对比<搬代码>

本文对比了OkHttp和HttpClient在创建对象、异步请求、文件上传及超时设置方面的差异。OkHttp的构建方式更为简洁,而HttpClient在设置超时上更具灵活性,能针对不同请求设置不同超时。在性能方面,HttpClient在单例模式下响应速度稍快,但在非单例模式下,OkHttp表现更优。总结来说,两者在性能和使用上各有优势,可根据实际需求选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码
OkHttp使用build模式创建对象来的更简洁一些
依赖包上,如果HttpClient需要发送异步请求、实现文件上传,需要额外的引入异步请求依赖

<!---文件上传-->
 <dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpmime</artifactId>
     <version>4.5.3</version>
 </dependency>
<!--异步请求-->
 <dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpasyncclient</artifactId>
     <version>4.5.3</version>
</dependency>

超时设置
HttpClient超时设置:
在HttpClient4.3+版本以上,超时设置通过RequestConfig进行设置

private CloseableHttpClient httpClient = HttpClientBuilder.create().build();
private RequestConfig requestConfig =  RequestConfig.custom()
        .setSocketTimeout(60 * 1000)
        .setConnectTimeout(60 * 1000).build();
String api = "/user/v1/getUserInfo";
String url = String.format("%s%s", "localhost:18080", api);
HttpGet httpGet = new HttpGet(url);
httpGet.setConfig(requestConfig);  //设置超时时间

超时时间是设置在请求类型HttpGet上,而不是HttpClient上

OkHttp超时设置:
直接在OkHttp上进行设置

private OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(60, TimeUnit.SECONDS)//设置连接超时时间
        .readTimeout(60, TimeUnit.SECONDS)//设置读取超时时间
        .build();

小结:
如果client是单例模式,HttpClient在设置超时方面来的更灵活,针对不同请求类型设置不同的超时时间,OkHttp一旦设置了超时时间,所有请求类型的超时时间也就确定

HttpClient和OkHttp性能比
client连接为单例:
单例模式下,HttpClient的响应速度要更快一些,单位为毫秒,性能差异相差不大

非单例模式下,OkHttp的性能更好,HttpClient创建连接比较耗时,因为多数情况下这些资源都会写成单例模式。

总结
OkHttp和HttpClient在性能和使用上不分伯仲,根据实际业务选择即可

作者:Lucie_xxm
链接:https://www.jianshu.com/p/30c531d9b125
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值