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