Java 如何让HttpAsyncClient异步运行?
我试图使用HttpAsyncClient对我的web应用程序进行压力测试,每秒提交100或1000个HTTP请求,并对每个请求的响应进行计时。我的代码是基于的,但是连接到服务器并发送HTTP请求的线程似乎坐在那里等待服务器的响应!相反,我希望它在不等待HTTP响应的情况下继续发送下一个HTTP请求 以下是我的测试代码:Java 如何让HttpAsyncClient异步运行?,java,multithreading,apache-httpclient-4.x,Java,Multithreading,Apache Httpclient 4.x,我试图使用HttpAsyncClient对我的web应用程序进行压力测试,每秒提交100或1000个HTTP请求,并对每个请求的响应进行计时。我的代码是基于的,但是连接到服务器并发送HTTP请求的线程似乎坐在那里等待服务器的响应!相反,我希望它在不等待HTTP响应的情况下继续发送下一个HTTP请求 以下是我的测试代码: public class TestAsyncHttpRequest { private static final SimpleDateFormat FORMAT = n
public class TestAsyncHttpRequest {
private static final SimpleDateFormat FORMAT = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss.SSS");
public static void main(String[] args) throws Exception {
CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
try {
// Start the client
httpclient.start();
final CountDownLatch latch = new CountDownLatch(100);
for (int i = 0; i < 100; i++) {
System.out.println("Sending POST request at "
+ FORMAT.format(new Date()));
final HttpPost request = new HttpPost(
"http://localhost:8080/test");
httpclient.execute(request, new FutureCallback<HttpResponse>() {
public void completed(final HttpResponse response) {
latch.countDown();
}
public void failed(final Exception ex) {
latch.countDown();
}
public void cancelled() {
latch.countDown();
}
});
Thread.sleep(50);
}
latch.await();
} finally {
httpclient.close();
}
}
}
servlet输出如下—请注意,它每20秒只接收两个请求:
INFO: TestServlet Received POST at: 2014-03-28 07:01:16.838
INFO: TestServlet Received POST at: 2014-03-28 07:01:16.838
INFO: TestServlet Received POST at: 2014-03-28 07:01:36.873
INFO: TestServlet Received POST at: 2014-03-28 07:01:36.873
INFO: TestServlet Received POST at: 2014-03-28 07:01:56.881
INFO: TestServlet Received POST at: 2014-03-28 07:01:56.881
INFO: TestServlet Received POST at: 2014-03-28 07:02:16.891
INFO: TestServlet Received POST at: 2014-03-28 07:02:16.891
是否有一些配置选项允许我向服务器发送一千个HTTP请求而不产生大量线程?
HttpAsyncClient
对每个主机的并发连接总数和并发连接数有限制
试着增加它们:
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setMaxConnTotal(100)
.setMaxConnPerRoute(100)
.build();
哦,是的!看来,我的限制因素是每条路由的mac连接数,默认为2?!?!
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setMaxConnTotal(100)
.setMaxConnPerRoute(100)
.build();