【问题标题】:JAVA: What's the fastest and best way to get a response code from HTTPS URL?JAVA:从 HTTPS URL 获取响应代码的最快和最好的方法是什么?
【发布时间】:2015-06-10 19:49:38
【问题描述】:
    private int getResponse(String url) throws Exception {

    try {
       URL check = new URL(url);
       HttpsURLConnection connection = (HttpsURLConnection)check.openConnection();
       connection.setRequestMethod("GET");
       connection.setConnectTimeout(5000);
       connection.connect();

       return(connection.getResponseCode());

    } catch (java.net.SocketTimeoutException e) {
           return getResponse(url);
    }

}

有没有比 HttpsURLConnection 更快的从 URL 获取响应代码的方法?

我从 HTTP Client Commons 尝试了 HeadMethod,但这并没有那么快。

提前致谢

【问题讨论】:

  • 你不能神奇地让服务器更快。
  • connection.setRequestMethod("GET") 和 connection.connect() 都是多余的。不要将递归用作迭代技术。

标签: java url https


【解决方案1】:

我强烈怀疑,与正常的 Internet 延迟和 Java 本身使用的网络堆栈(由底层操作系统提供)相比,差异绝对是最小的。

虽然无论库如何,发出 1 个请求都会产生大致相同的开销(只要它没有完全损坏;Apache Commons 和 JDK 都可以),如果您要发出多个请求,有几件事将显着提高性能:

  • 如果您需要尽快完成多个请求,并且不需要每个请求都完成后才能启动其他请求,则并行处理。一个有用的指针可能是https://github.com/AsyncHttpClient/async-http-client(Project Grizzly 的一部分;使用 NIO 进行非阻塞、高度可扩展的通信)
  • 如果您将执行来自同一站点的其他请求,那么如果您使用 keep-alive 标头并将同一连接用于多个请求,您将看到显着的性能提升 (> 2 倍)。这是由于 HTTPS 连接的高昂设置成本。更多信息请访问HTTP vs HTTPS performance(以及漂亮的图表here)。在交换任何数据之前,首次 HTTPS 请求需要 2 次往返来协商加密;进一步的请求可以避免握手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2011-10-26
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多