簡體   English   中英

Apache HttpClient TCP Keep-Alive(socket keep-alive)

[英]Apache HttpClient TCP Keep-Alive (socket keep-alive)

我有http請求需要花費太多時間來處理服務器(大約5分鍾)。 由於連接空閑5分鍾,代理服務器會關閉連接。 我正在嘗試在Apache DefaultHttpClient中使用TCP Keep-Alive來使連接長時間處於活動狀態(不要混淆TCP Keep-Alive和HTTP Keep-Alive,它只是在發送響應后不會關閉連接)。

Apache http核心具有以下參數SO_KEEPALIVE: http//hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#SO_KEEPALIVE 但是,由於DefaultHttpClient javadocs,我無法使用該參數自定義客戶端的行為: https//hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html

我做了這個,然而,似乎它不起作用:

HttpClient client = getHttpClient();
client.getParams().setParameter(CoreConnectionPNames.SO_KEEPALIVE, true);

你知道如何使DefaultHttpClient使用TCP Keep-Alive策略嗎?

為了使它工作,我需要設置keepalive超時。 但它們只能在OS級別設置,而不能在Java代碼中設置。 據我所知,在Java代碼中設置keepalive超時是不可能的。

以下是我在Linux上設置它們的方法:

sudo sysctl -w net.ipv4.tcp_keepalive_time=60
sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60
sudo sysctl -w net.ipv4.tcp_keepalive_probes=10

值是秒數。

暫無
暫無

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

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