每秒只能发送10个HTTP POST请求?

时间:2011-10-15 18:37:57

标签: java http

这可能看起来像一个奇怪的问题,但我试图在几秒钟的间隔内发送尽可能多的HTTP POST请求。

我想知道是否有人有任何建议,因为我目前只实现了大约6-9个请求,这似乎相当低。我的代码如下 - 我使用的是Apache Commons HTTP库:

  import org.apache.commons.httpclient.HttpClient;
  import org.apache.commons.httpclient.methods.GetMethod;
  import org.apache.commons.httpclient.methods.PostMethod; 


 long start = System.currentTimeMillis();
 long end = start + 4000; 
 int count = 0;
 while (System.currentTimeMillis() < end)
      {
        count++;
        httpClient.executeMethod(method);
       }
 System.out.println((double)count/4 + " reqs / sec");

post方法预先创建一次:

 String body= getBodyString();
 PostMethod method = new PostMethod(Url);
 method.setRequestEntity( new StringRequestEntity(body));
 method.setRequestHeader(...etc)    

我猜是有某种固有的顺序行为,httpclient正在等待响应?在我的情况下,我不关心响应,所以可能有一种方法来提高通话率。也许我可以准备下一个请求,同时还有一个请求。还有一个更高效,更快速的库吗?

我是这类代码的新手,所以如果这个问题没有多大意义,我会道歉。

2 个答案:

答案 0 :(得分:5)

  

使用线程,卢克!

您的客户端受服务器平均响应时间的限制。如果服务器响应100毫秒,则每秒不会超过10个请求。

但是,如果您同时发送10个请求 并且服务器能够以相同的响应时间同时处理它们,则您立即达到100个请求/秒。

如果您的目标是对应用程序进行压力测试,那么有一些不错的免费工具,例如JMeterab。如果你真的在向别人的网站发送垃圾邮件:对你感到羞耻。很可能他们的网络基础设施很快就会让你失望。

答案 1 :(得分:3)

为什么不在单独的帖子中执行每个帖子?指示:

httpClient.executeMethod(method);

花费时间,如果你正在寻找增加POST的数量,我会使用一组线程来处理请求(一个线程池)