我正在使用http连接并使用MultiThreadedHttpConnectionManager和httpClient。
出于我的目的,我使用以下方法在1ms后关闭所有空闲连接:closeIdleConnections(1)
。
我想知道什么被认为是"闲置连接"在http?似乎等待答案不是空闲连接。
此致
答案 0 :(得分:0)
HTTP(1.1)指定连接应在任何一方明确关闭之前保持打开状态。除此之外,规范仅提供策略的一个示例,建议使用超时值,超过该超时值应关闭非活动(空闲)连接。连接保持打开,直到下一个HTTP请求减少延迟和TCP连接建立开销。但是,空闲打开的TCP连接会占用套接字和缓冲区空间。
摘自RFC 7230:
6.5。失败和超时
服务器通常会有一些超时值,超过这个值,它们将不再维持非活动连接。代理服务器可能会使此值更高,因为客户端可能会通过同一服务器建立更多连接。持久连接的使用对客户端或服务器的超时长度(或存在)没有要求。
当客户端或服务器希望超时时,应该在传输连接上发出正常关闭。客户和服务器应该经常关注运输关闭的另一侧,并在适当时对其进行响应。如果客户端或服务器没有及时检测到另一方的关闭,则可能导致网络上不必要的资源消耗。
客户端,服务器或代理可以随时关闭传输连接。例如,客户端可能已经开始在服务器决定关闭“空闲”连接的同时发送新请求。从服务器的角度来看,连接在空闲时关闭,但从客户端的角度来看,请求正在进行中。
答案 1 :(得分:0)
通过研究源代码,在HttpClient MultiThreadedHttpConnectionManager实现中,当池中的连接超过idleTime时,连接被简单地视为空闲。 idleTime作为参数传递给方法closeIdleConnections(idleTime)。