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