java创建HTTP持久连接

时间:2012-05-11 11:20:40

标签: java httpurlconnection persistent

我正在尝试编写一个java程序,它会自动下载并命名一些我最喜欢的网络漫画。因为我将从同一个域请求多个对象,所以我希望有一个持久的http连接,我可以保持打开直到所有漫画都已下载。以下是我正在进行的工作。如何在不打开新的http连接的情况下从同一个域但是不同的路径发出另一个请求?

import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL

public class ComicDownloader
{
    public static void main(String[] args)
    {
        URL url = null;
        HttpURLConnection httpc = null;
        BufferedReader input = null;

        try
        {
            url = new URL("http://www.cad-comic.com/cad/archive/2002");
            httpc = (HttpURLConnection) url.openConnection();
            input = new BufferedReader(new InputStreamReader(httpc.getInputStream()));
            String inputLine;

            while ((inputLine = input.readLine()) != null)
            {
                System.out.println(inputLine);
            }

            input.close();
            httpc.disconnect();
        }
        catch (IOException ex)
        {
            System.out.println(ex);
        }
    }
}

4 个答案:

答案 0 :(得分:3)

只要HTTP服务器支持keep-alive,HttpURLConnection的实现将缓存底层TCP连接并为您透明地执行此操作。

答案 1 :(得分:1)

对HTTP keep-Alive的支持是透明的。但是,它可以由系统属性 http.keepAlive http.maxConnections 以及HTTP / 1.1指定的请求和响应标头控制。

控制Keep-Alive行为的系统属性包括:

  

http.keepAlive =(布尔值)默认值:true

指示是否应支持保持活动(持久)连接。

  

http.maxConnections =(int)默认值:5

表示在任何给定时间保持活动的每个目标的最大连接数

取自:Persistent Connections

答案 2 :(得分:0)

HTTP连接是无状态的,因此您请求的每个新图像都是新的URL,因此是新连接。

答案 3 :(得分:0)

要利用java持久性Http连接,不应关闭HttpURLConnection(在您的情况下为httpc),只需在从流中读取所有数据或关闭它时关闭输入流。 Java将清除Socket连接并使其可供重用 根据jdk,它使用缓存机制重用相同的TCP连接。调用disconnect()不应暗示此HttpURLConnection实例可以重复用于其他请求。