这似乎是一个奇怪的问题,但我正在尝试在几秒钟的时间间隔内发送尽可能多的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在等待响应?在我的例子中,我不关心响应,所以大概有一种方法可以提高呼叫率。也许我可以在发送请求的同时准备下一个请求,等等,还有更高效和更快的库吗?
我是第一次接触这种类型的代码,所以如果这个问题没有太多意义,我向您道歉。
发布于 2011-10-16 02:41:39
使用线程,卢克!
您的客户端受到服务器平均响应时间的限制。如果服务器在100毫秒内响应,则每秒不会超过10个请求。
但是,如果您同时发送10个请求,并且服务器能够在相同的响应时间内同时处理它们,那么您将立即达到100个请求/秒。
如果您打算对应用程序进行压力测试,有一些很好的免费工具,比如JMeter或ab。如果你真的在给别人的网站发垃圾邮件:你真丢脸。他们的网络基础设施很可能很快就会切断你的网络。
发布于 2011-10-16 02:42:27
为什么不在单独的线程中执行每个帖子呢?说明:
httpClient.executeMethod(method);
这需要时间,如果你想增加POST的数量,我会为请求使用一组线程(一个线程池)。
https://stackoverflow.com/questions/7779857
复制相似问题