【问题标题】:What is an idle http connection?什么是空闲的 http 连接?
【发布时间】:2014-06-11 09:44:44
【问题描述】:

我正在使用 http 连接并使用 MultiThreadedHttpConnectionManager 和 httpClient。

出于我的目的,我将使用以下方法在 1 毫秒后关闭所有空闲连接:closeIdleConnections(1)

我想知道什么被认为是 http 中的“空闲连接”?看来等待应答不是空闲连接。

问候,

【问题讨论】:

    标签: http httpurlconnection


    【解决方案1】:

    HTTP (1.1) 指定连接应保持打开状态,直到任何一方明确关闭。除此之外,该规范仅提供了一个策略示例,建议使用超时值,超过该值的非活动(空闲)连接应关闭。在下一个 HTTP 请求之前保持打开的连接减少了延迟和 TCP 连接建立开销。但是,空闲打开的 TCP 连接会消耗套接字和缓冲空间内存。

    摘自 RFC 7230:

    6.5。失败和超时

    服务器通常会有一些超时值,超过该值它们将不再保持非活动连接。代理服务器可能会使此值更高,因为客户端可能会通过同一服务器建立更多连接。使用持久连接对客户端或服务器的超时长度(或存在)没有任何要求。

    当客户端或服务器希望超时时,它应该在传输连接上发出正常关闭。客户端和服务器都应该不断地观察传输关闭的另一端,并在适当的时候做出响应。如果客户端或服务器没有及时检测到对方的关闭,可能会导致网络上不必要的资源消耗。

    客户端、服务器或代理可以随时关闭传输连接。例如,客户端可能在服务器决定关闭“空闲”连接的同时开始发送新请求。从服务器的角度来看,连接在空闲时被关闭,但从客户端的角度来看,请求正在进行中。

    【讨论】:

      【解决方案2】:

      通过研究源码,在HttpClient MultiThreadedHttpConnectionManager实现中,当池中连接的年龄超过idleTime时,简单的认为连接是空闲的。 idleTime 作为参数传递给方法 closeIdleConnections(idleTime)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2020-04-29
        • 2014-12-04
        • 1970-01-01
        • 2020-10-26
        相关资源
        最近更新 更多