通过高速互联网连接(在AWS EC2实例中)执行简单的GET请求,吞吐量似乎非常低。我用多台服务器试过这个。
这是我正在使用的代码:
HTTP2Client http2Client = new HTTP2Client();
http2Client.start();
SslContextFactory ssl = new SslContextFactory(true);
HttpClient client = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), ssl);
client.start();
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println("i" + i);
ContentResponse response = client.GET("https://http2.golang.org/");
System.out.println(response.getStatus());
}
System.out.println(System.currentTimeMillis() - start);
我获得的吞吐量大约是每秒8个请求。
这似乎相当低(与命令行中的curl相比)。
有什么我想念的吗?有什么办法对此进行涡轮增压?
编辑:如何让Jetty使用多个流?
答案 0 :(得分:4)
这不是测量吞吐量的正确方法。
根据您的地理位置,您将受到客户端和服务器之间延迟的支配。如果延迟为125毫秒,则只能发出8个请求/秒。
例如,从我的位置,ping
到http2.golang.org是136毫秒。
即使您的延迟较少,服务器很可能会限制您:我不认为http2.golang.org会很高兴看到您在紧密循环中发出10k请求。
我很想知道同一测试中的curl
或nghttp
潜伏期是多少,但我猜不会有太大差异(如果他们关闭,可能会更糟糕)每个请求后的连接。)
This test,也不是一个合适的基准测试,在我的笔记本电脑上显示大约500个请求/秒;没有TLS,大约2500个请求/秒。
我不确切地知道你要做什么,但是你的测试并没有告诉你关于Jetty HttpClient
的表现的任何信息。