我有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策略吗?
答案 0 :(得分:2)
为了使其工作,我需要设置keepalive超时。 但是它们只能在操作系统级别设置,而不能在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
值是秒数。