【问题标题】:HTTPS requests and multi-threadingHTTPS 请求和多线程
【发布时间】:2009-11-12 23:38:57
【问题描述】:

Java 的 URL 类是线程安全的,特别是 [URL.openConnection()](http://java.sun.com/javase/6/docs/api/java/net/URL.html#openConnection())?

在我的应用程序中,我每秒创建数十个并发 HTTPS 连接到同一个 URL,我希望最大限度地重用对象。然而,从文档中并不清楚什么可以重用。

编辑:如果需要,我愿意使用不同的库。

【问题讨论】:

    标签: java url connection connection-pooling


    【解决方案1】:

    我对 HTTP 和 java 的标准反应是推荐Apache HttpClient。它支持 HTTP 1.1,因此您可以在与服务器成功进行 HTTP 请求/响应后保持这些连接打开以供重复使用。

    它内置了对连接池的支持以及文档describes 如何在多线程上下文中使用它。

    【讨论】:

    • +1 表示多线程 HttpClient 选择。你会省去很多麻烦。
    【解决方案2】:

    是的。它是线程安全的。我在很多线程中使用它并没有发现任何问题。

    Sun 的默认处理程序也默认支持 keep-alive,因此多个线程可以共享同一个连接。您必须小心阅读所有响应(包括 ErrorStream)。否则,下一个请求将以错误状态开始。

    【讨论】:

      【解决方案3】:

      URL.openConnection 将创建一个 HttpsURLConnection 对象,它是 HttpURLConnection 的子类。 docs for HttpURLConnection 表示它可以使用到服务器的单个底层连接来统计多个请求。我假设这是共享 ala HTTP 1.1。

      因此,每次 URL.openConnection 调用都会获得一个新的 HttpsURLConnection 对象,但不会获得大量网络连接。

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多