Java 高效地生成多个http请求

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

我想向表单的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();

有没有一种方法可以更有效地发出这种需要更少时间的请求

一种方法是使用带有固定线程池的executor服务(大小取决于目标HTTP服务可以处理的数量)并并行地大量请求服务。Runnable将基本上执行您在示例代码中概述的步骤,顺便说一句。

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

  • 更改协议以允许您批处理请求
  • 并行发出多个请求(使用多个线程或并行执行多个进程;请参阅)
  • 缓存以前的结果以减少请求数
  • 压缩请求或响应
  • 保持HTTP连接
有没有一种方法可以更有效地提出这样的请求,而所需的时间更少

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

要超过该限制,您需要重新设计服务器和/或服务器的web API。例如:

  • 将web API更改为允许客户端在每个请求中获取多个对象将减少请求开销

  • 压缩可能会有所帮助,但您正在用网络带宽换取CPU时间和/或延迟。如果您有一个快速的端到端网络,那么压缩实际上可能会减慢速度

  • 缓存通常会有所帮助,但在您的用例中可能不会。(每个对象只请求一次…)

  • 使用持久HTTP连接可以避免为每个请求创建新TCP/IP连接的开销,但我认为HTTPS不能做到这一点。(这是一个遗憾,因为HTTPS连接的建立要昂贵得多。)


您是如何计算时间的??4-5小时!!!我测量了进行几千次http调用所需的时间,并估计了REST所需的时间。如果可以使用StringBuilder,请不要使用StringBuffer。StringBuffer比StringBuffer大约快25%