什么是空闲的HTTP连接?

4
我正在处理与HTTP连接相关的事情,并使用MultiThreadedHttpConnectionManager和httpClient。
为了我的目的,我使用以下方法关闭所有闲置连接:closeIdleConnections(1)。
我想知道在http中什么被认为是“空闲连接”?等待答案似乎不是一个空闲连接。
谢谢。
2个回答

5
HTTP(1.1)规定连接应该保持开放状态,直到双方明确关闭为止。除此之外,规范仅提供了一个策略示例,建议使用超时值来关闭不活动的连接。保持打开状态直到下一次HTTP请求可以减少延迟和TCP连接建立开销。然而,空闲的TCP连接会消耗套接字和缓冲区内存。
摘自RFC 7230:
6.5.失败和超时
服务器通常会有某些超时值,超出这个时间将不再维护不活动的连接。代理服务器可能会设置较高的值,因为客户端很可能通过同一台服务器进行更多的连接。使用持久连接不对客户端或服务器的超时长度(或存在性)提出要求。
当客户端或服务器希望超时时,应在传输连接上发出平稳的关闭。客户端和服务器应该不断地观察传输关闭的另一侧,并根据需要做出响应。如果客户端或服务器不能及时检测到另一侧的关闭,则可能会对网络造成不必要的资源消耗。
客户端、服务器或代理可以随时关闭传输连接。例如,客户端可能已经开始发送新请求,同时服务器已经决定关闭“空闲”连接。从服务器的角度来看,连接在空闲时被关闭,但从客户端的角度来看,请求正在进行中。

1
通过研究源代码,可以发现在HttpClient MultiThreadedHttpConnectionManager的实现中,当连接在池中的寿命超过空闲时间时,该连接被视为空闲。 idleTime作为参数传递给closeIdleConnections(idleTime)方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接