作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 HttpAsyncClient 通过每秒提交一百或一千个 HTTP 请求并对每个请求的响应进行计时来对我的 Web 应用程序进行压力测试。我的代码基于 this quickstart guide但似乎连接到服务器并发送 HTTP 请求的线程就坐在那里等待服务器的响应!相反,我希望它继续发送下一个 HTTP 请求,而不等待 HTTP 响应。
这是我的测试代码:
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只是打印请求的时间,然后 hibernate 20秒:
public class TestServlet extends HttpServlet {
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
getServletContext().log(
"TestServlet Received POST at: " + fmt.format(new Date()));
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
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();
关于java - 如何让 HttpAsyncClient 异步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22712059/
我是一名优秀的程序员,十分优秀!