【问题标题】:Concurrent http requests并发 http 请求
【发布时间】:2017-06-11 19:50:03
【问题描述】:

我在多个线程上运行以下方法:

private JSONObject jsonFromUrl(String requestUrl)  {
    try {
        URLConnection connection = new URL(requestUrl).openConnection();
        connection.setRequestProperty("Accept-Charset", charset);
        InputStream response = connection.getInputStream();
        JSONParser jsonParser = new JSONParser();
        return  (JSONObject)jsonParser.parse(
                new InputStreamReader(response,charset));
    } catch (Exception e) {
        Logger.error("Exception while sending request: " + requestUrl + " error: " + e);
        e.printStackTrace();
        return new JSONObject();
    }
}

是否并行处理 HTTP 请求?以这种方式发出请求是否会阻止其他线程发送请求,直到第一个响应到达?

【问题讨论】:

  • 答案:并行,是的。阻止其他实例,不。您是否有理由怀疑您不能在不同线程中发生多个 URL 下载实例?
  • 滞后时间比预期的要长,无法确定这是由于连接还是缺乏并行性
  • 你在任何地方关闭你的 InputStream 吗?
  • @FlorianAlbrecht - 我愿意。
  • 好吧,我的问题表明我看不到这一点,因为它不在您的方法中。由于 InputStream 在方法中打开 - 它在哪里关闭?

标签: java multithreading concurrency parallel-processing httprequest


【解决方案1】:

可以从不同的线程调用该方法。那里没有共享变量,因此没有并发问题。但是,您可以通过拥有一个连接池(套接字连接)来重用连接并获得更快的响应来优化该过程。 无法控制套接字,您最终可能会因时间响应缓慢而告终。当然,我们正在讨论打开的套接字连接以及服务器保持套接字打开的可能性(Keep-Alive 标头)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多