【问题标题】:Issues using multiple HttpURLConnection sends in parallel?使用多个 HttpURLConnection 并行发送的问题?
【发布时间】:2017-08-22 18:59:48
【问题描述】:

目前,我正在用 Java 设计一个模块,该模块收集数据并在相同的目标地址上以不同的 API 端点并行发送它们。它们是使用线程并行发送的。

因为它们被发送到相同的目标 IP 地址,使用HttpURLConnection 发送信息时会出现问题吗?我认为他们可能使用相同的基本端口/套接字,即使每次传输都使用一个新的HttpURLConnection 对象。

他们最终会被一一发送吗?如果连接存在问题(例如超时),如果是一个接一个发送,每个连接的超时是否会累加?

【问题讨论】:

    标签: java sockets timeout httpurlconnection


    【解决方案1】:

    如the docs中所述:

    Each HttpURLConnection instance is used to make a single request but the
    underlying network connection to the HTTP server may be transparently
    shared by other instances.
    

    这意味着它可能取决于您使用的 JVM。看来他们最终可能会被一一发送。

    【讨论】:

      【解决方案2】:

      是否应该重用连接的问题是连接池和 HttpURLConnection 类本身的实现问题。它与JVM无关。

      如果我们保持与 HttpURLConnection 无关的事情。在一天结束时,一切都会转化为套接字(端点)和以套接字为目标的连接。每个端点可以有多个连接。你的问题的答案是,只要连接没有被池化,它们就不会被一一发送。

      本主题非常详细地解释了套接字和连接的概念。我建议阅读它。

      What is the difference between a port and a socket?

      关于 HttpURLConnection 的连接池是可能的,并在此处详细解释:Java HttpURLConnection and pooling

      【讨论】:

      • 你能看看上面bezet的回答吗?这就是我所指的,我很谨慎,他们都使用相同的底层连接。
      • @stoneman_41 我认为连接的重用与 JVM 没有任何关系。如果重用连接,则取决于 HttpURLConnection 本身的实现,而不是底层 JVM。如果使用连接池,则可能会发生连接共享。再次与JVM无关。我仍然支持我的答案。
      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多