http客户端-性能比较系列-第一篇-单线程

时间:2024-01-24 21:15:51

系列文章:
单线程性能测试:https://www.cnblogs.com/victor2302/p/11077208.html
多线程性能测试:https://www.cnblogs.com/victor2302/p/11080965.html
github代码:https://github.com/victorsheng/benchmark-anything

几种常见的java http客户端

  • ApacheHttpShareClient
  • JdkHttpClient
  • OkHttpClientt
  • SpringHttpClient
  • UnirestHttpClient

具体版本:

 <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>${okhttp.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mashape.unirest/unirest-java -->
    <dependency>
      <groupId>com.mashape.unirest</groupId>
      <artifactId>unirest-java</artifactId>
      <version>1.4.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.6.RELEASE</version>
    </dependency>

几种简单的场景

  • 访问get方法接口,低延迟
  • 访问post上传接口
  • 访问文件下载接口

结果地址

http://jmh.morethan.io/?source=https://gist.githubusercontent.com/victorsheng/0653e85058481900f10f57cfebf1ad80/raw/19b6a7ec345107503b81b58a07dc61cb2c43595d/1561368996179-result.csv

测试1:

单线程-访问一个立即返回的接口

响应时间

结果:
第一名: ApacheHttpShareClient
第二名: UnirestHttpClient
第三名: OkHttpClientt
并列第四名: JdkHttpClient, SpringHttpClient

其中UnirestHttpClient底层就是ApacheHttpShareClient,加了默认的参数,通过Unirest风格的api

测试2:

单线程-访问响应时间为5ms的接口

响应时


各个客户端之间,无显著差异

测试3

单线程-文件下载 300kb,600kb,1m

ApacheHttpShareClient表现良好
SpringHttpClient其次

测试4

单线程-文件上传300kb,600kb

响应时

UnirestHttpClient表现良好

小结

并没有发现一个客户端在各个场景都优于其他http客户端
但综合各个场景,在单线程调用情况下,org.apache.http.impl.client.HttpClients整体较为优秀

代码地址

https://github.com/victorsheng/benchmark-anything
其中:
http-client-benchmark目录包含了性能测试的代码
http-client-benchmark-mock-server目录包含了被客户端访问的接口实现