HTTP 客户端性能大比拼

Http客户端调用目前应用很普遍,无论是分布式系统,或安卓等移动手机或开放API调用等,哪种客户端调用性能最快呢?

HTTP Client Performance – IO | Atlassian Blogs
该文比较了目前大部分如下客户端库包:

1. Apache httpcomponents-client 4.2.5 Java IO Java语言
2. Apache commons-httpclient (discontinued) 3.1 Java IO Java语言
3. Apache HttpAsyncClient (dev) 4.0-beta3 Java NIO, async Java语言
4.Bee 0.21.0 Java HTTP Scala语言
5.soke-http 3.0.0 Finagle, Netty Scala语言
6.Dispatch 0.10.0 Ning Async HTTP Client Scala语言
7.cURL 7.24.0 x86_64-apple-darwin10.8.0 C语言


针对不同的下载文件大小,它们的性能不同:

当下载文件只有80k时,基于C语言的cURL打败了基于JVM平台的对手,其次是Commoins-httpclients获得第二名。

再看下载中等文件7mb:

Bee简直弱逊了,这是第一和第二比较靠近了。

再看下载30mb大型文件:

经典的apache击败了基于Netty的库包,第一名是经典IO的commons-httpclient,apache async也击败了cURL。

关键词NIO:

传统经典是在内存中从kernel或网络socket到应用程序的缓冲来回拷贝数据, NIO做很多设计避免多个缓冲的拷贝,避免kernel 的场景切换 。

NIO的异步还能够获得更高的吞吐量。

[该贴被banq于2013-07-14 14:28修改过]
[该贴被banq于2013-07-14 14:29修改过]