簡體   English   中英

PoolingHttpClientConnectionManager 如何管理連接?

[英]How PoolingHttpClientConnectionManager manage connections?

我有一個問題,它是What is httpconnection of PoolingHttpClientConnectionManager?.

我知道如果我們使用PoolingHttpClientConnectionManager ,它減少了花費連接建立的時間(例如ssl handshaketcp enter code herehandshake等),因為它重用了連接。

但是,我對 http 連接重用的理解是保持活動狀態,我們可以在服務器支持時使用它。 如果主機不支持keep-alive 連接,我們就無法與帶有keep-alive 的主機通信。

所以,這是我的問題,

如果我使用 PoolingHttpClientConnectionManager 管理非保持活動服務器環境中的連接,Connectionmanager 是否管理連接? 或者它根據請求創建連接?

如果 ConnectionManager 管理連接,ConnectionManager 如何保持連接? 管理器是否定期發送字節?

如果你沒有定義 HttpClient 將作為連接可以無限期地保持活動狀態,來自Apache http docs

如果響應中不存在 Keep-Alive 標頭,則 HttpClient 假定連接可以無限期地保持活動狀態。

如果要定義 Keep-Alive 策略,請參見示例

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;
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM