HttpURLConnection getInputStream()有一秒延迟

时间:2013-11-08 13:39:14

标签: java performance httpurlconnection

我正在使用HttpURLConnection发出POST请求。我在测试期间始终观察到相同的行为:

  1. 第一个请求运行速度非常快(毫秒)
  2. 以下所有请求需要一秒钟+几毫秒
  3. 因此导致1秒延迟。它能是什么?延迟恰好发生在HttpURLConnection#getInputStream()中。 我用HttpClient替换了实现 - 然后一切正常,没有第二次延迟(所以它不是服务器故障)。但我真的不想使用任何外部依赖,所以我想修复HttpURLConnection的事情......有什么想法吗?

    目前的实施情况。我尝试了stackoverflow的一些提示(向请求中添加标题),但没有成功。

            URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
    
        con.setRequestProperty("Content-Length", ""
            + (body == null ? 0 : body.length));
    
        // Send post request
        con.setDoOutput(true);
        OutputStream wr = con.getOutputStream();
        if (body != null) {
        wr.write(body);
        }
        wr.flush();
        wr.close();
    
        BufferedReader rd = new BufferedReader(new InputStreamReader(
            con.getInputStream()));
        String line;
        String result = "";
        while ((line = rd.readLine()) != null) {
        result += line;
        }
    
        rd.close();
        con.disconnect();
    
        return result;
    

    PS:这是关于jse,而不是android。

1 个答案:

答案 0 :(得分:1)

你永远不会从连接中关闭输入流 - 可能意味着连接不符合池的条件,并且在下次尝试时它等待最多一秒钟以查看是否上一个请求的连接将成为有资格进行合并。

至少,关闭流是个好主意。如果您使用的是Java 7,请使用try-with-resources块 - 并为编写器同上。

顺便说一句,我建议您在阅读时明确说明您期望的编码 - 或使用更高级别的库,该库会根据标题自动检测到。