我想向表格的网络服务提出几百万个http请求 - htp://(某些ip)// {id}
我有ids列表。 简单的计算表明,我的java代码大约需要4-5个小时才能从api获取数据 代码是
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();
有没有办法更有效地提出这样的请求,这将花费更少的时间
答案 0 :(得分:1)
一种方法是使用具有固定线程池的执行程序服务(大小取决于目标HTTP服务可以处理的程度)并且并行地轰击对服务的请求。 Runnable基本上会执行您在示例代码中概述的步骤,顺便说一句。
答案 1 :(得分:0)
在开始优化代码之前,您需要对代码进行概要分析。否则你可能最终优化错误的部分。根据您从分析中获得的结果,请考虑以下选项。
答案 2 :(得分:0)
有没有办法更有效地提出这样的请求,这会花费更少的时间?
嗯,您可能会并行运行少量请求,但您可能会使服务器饱和。超过每秒一定数量的请求,吞吐量可能会降低......
要超过该限制,您需要重新设计服务器和/或服务器的Web API。例如:
更改Web API以允许客户端在每个请求中获取大量对象将减少请求开销。
压缩可能有所帮助,但您需要在网络带宽上进行CPU时间和/或延迟交易。如果你有一个快速的端到端网络,那么压缩实际上可能会减慢速度。
缓存一般有帮助,但可能不在您的用例中。 (您只需要一次请求每个对象......)
使用持久性HTTP连接可以避免为每个请求创建新的TCP / IP连接的开销,但我认为您不能为HTTPS执行此操作。 (这是一种耻辱,因为HTTPS连接建立要贵得多。)