首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效地发出多个http请求

高效地发出多个http请求
EN

Stack Overflow用户
提问于 2012-09-03 17:10:33
回答 3查看 3.4K关注 0票数 3

我想向格式为-htp://(某个ip)//{id}的web服务发出几百万个http请求

我随身带着身份证清单。简单的计算表明,我的java代码大约需要4-5个小时才能从api中获取数据。

代码语言:javascript
复制
URL getUrl = new URL("http url");
URLConnection conn = getUrl.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sbGet = new StringBuffer();
String getline;
while ((getline = rd.readLine()) != null)
{
    sbGet.append(getline);
}
rd.close();
String getResponse = sbGet.toString();

有没有一种方法可以更有效地发出这样的请求,并且花费更少的时间

EN

回答 3

Stack Overflow用户

发布于 2012-09-03 17:16:24

一种方法是使用具有固定线程池的executor服务(大小取决于目标HTTP服务可以处理的量),并并行轰炸对该服务的请求。Runnable基本上执行您在示例代码btw中概述的步骤。

票数 1
EN

Stack Overflow用户

发布于 2012-09-03 17:20:17

在开始优化代码之前,您需要对代码进行性能分析。否则,你可能最终会优化错误的部分。根据您从分析中获得的结果,请考虑以下选项。

更改协议以允许您对请求进行批处理并并行发出多个请求(使用多个线程或并行执行多个进程;请参见以前的结果以减少请求的数量或response

  • Persist
票数 0
EN

Stack Overflow用户

发布于 2012-09-03 17:22:58

有没有一种方法可以更有效地发出这样的请求,并且花费更少的时间?

您可能会并行运行少量的请求,但很可能会使服务器饱和。超过每秒一定数量的请求,吞吐量可能会下降……

要突破这一限制,您需要重新设计服务器和/或服务器的web API。例如:

  • 将您的web API更改为允许客户端在每个请求中获取多个对象将减少请求开销。
  • 压缩可能会有所帮助,但您正在牺牲网络带宽来换取CPU时间和/或延迟。(每个对象只请求一次...)使用持久HTTP连接的
  • 避免了为每个请求创建新的TCP/IP连接的开销,但我不认为您不能对HTTPS执行此操作。(这很遗憾,因为建立HTTPS连接的成本要高得多。)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12244959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档