2016-05-11 9 views
3

サーバーで処理するのに時間がかかりすぎる(約5分)HTTPリクエストがあります。接続は5分間アイドル状態になるため、プロキシサーバーは接続をシャットダウンします。 私はApache DefaultHttpClientでTCP Keep-Aliveを使用して接続を長くしようとしています(TCPキープアライブとHTTPキープアライブを混同しないでください。レスポンスの送信後に接続を閉じないだけです)。Apache HttpClient TCPキープアライブ(ソケットキープアライブ)

Apache httpコアのパラメーターは次のとおりです。SO_KEEPALIVE:http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#SO_KEEPALIVE。しかし、DefaultHttpClient javadocのために、私はそのパラメータでクライアントの動作をカスタマイズできません: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キープアライブ戦略を使うようにする方法を知っていますか?

+2

キープアライブタイムアウトを設定する必要がありました。ただし、Javaコードではなく、OSレベルでのみ設定できます。ここで私はどのように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 'となる。 値は秒です。 – Barataliba

+0

これはアプリレベルの解決策ではありません。 OSレベルのソリューションでは、誤解やドキュメントのエラーが発生します。 OSレベルのソリューションを見つけることができれば良いでしょう。 –

答えて

2

キープアライブタイムアウトを設定する必要がありました。 しかし、Javaコードではなく、OSレベルでのみ設定できます。私が知っているように、Javaコードでキープアライブタイムアウトを設定することはできません。ここで

は、私は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 

値は秒の量です。

関連する問題