【问题标题】:Can only send 10 HTTP POST requests/second?每秒只能发送 10 个 HTTP POST 请求?
【发布时间】:2011-10-16 03:44:07
【问题描述】:

这似乎是一个奇怪的问题,但我试图在几秒钟的时间间隔内发送尽可能多的 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 正在等待响应?就我而言,我不关心响应,所以大概有一种方法可以提高通话率。也许我可以在发送请求的同时准备下一个请求等。还有一个更高效、更快速的库吗?

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

【问题讨论】:

  • 你的标题确实让人觉得这是出于恶意目的......
  • 我可以向您保证,它并非针对任何恶意内容。

标签: java http


【解决方案1】:

使用线程,卢克!

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

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

如果您打算对您的应用程序进行压力测试,有一些不错的免费工具,例如 JMeterab。如果您实际上是在向别人的网站发送垃圾邮件:真丢脸。他们的网络基础设施很可能很快就会切断您的联系。

【讨论】:

    【解决方案2】:

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

    httpClient.executeMethod(method);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-12
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多