PoolingHttpClientConnectionManager 如何管理连接?

How PoolingHttpClientConnectionManager manage connections?

我有一个问题 What is httpconnection of PoolingHttpClientConnectionManager?.

我知道如果我们使用 PoolingHttpClientConnectionManager,它会减少建立连接的时间(例如 ssl handshaketcp enter code herehandshake 等),因为它会重用连接。

不过,我对http连接重用的理解是keep-alive,当服务器支持时我们可以使用它。如果主机不支持keep-alive连接,我们将无法与带keep-alive的主机通信。

所以,这是我的问题,

如果我使用 PoolingHttpClientConnectionManager 来管理非 keep-alive 服务器环境中的连接, Connectionmanager 管理连接吗?或者它根据请求创建连接?

如果ConnectionManager管理连接,ConnectionManager如何保持连接?管理器是否定期发送字节?

如果您不定义 HttpClient 将充当连接可以无限期保持活动状态,来自 Apache http docs:

If the Keep-Alive header is not present in the response, HttpClient assumes the connection can be kept alive indefinitely.

如果您想定义 Keep-Alive 策略,请参阅 example:

ConnectionKeepAliveStrategy myStrategy = new ConnectionKeepAliveStrategy() {
    @Override
    public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
        HeaderElementIterator it = new BasicHeaderElementIterator
            (response.headerIterator(HTTP.CONN_KEEP_ALIVE));
        while (it.hasNext()) {
            HeaderElement he = it.nextElement();
            String param = he.getName();
            String value = he.getValue();
            if (value != null && param.equalsIgnoreCase
               ("timeout")) {
                return Long.parseLong(value) * 1000;
            }
        }
        return 5 * 1000;
    }
};