美文网首页
HttpClient和OkHttp对比

HttpClient和OkHttp对比

作者: Lucie_xxm | 来源:发表于2020-07-20 17:52 被阅读0次

    代码

    • 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在性能和使用上不分伯仲,根据实际业务选择即可

    相关文章

      网友评论

          本文标题:HttpClient和OkHttp对比

          本文链接:https://www.haomeiwen.com/subject/hqtykktx.html