我的 http 请求服务器处理时间过长(大约 5 分钟)。因为连接闲置了 5 分钟,所以代理服务器关闭了连接。 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep-Alive 使连接长时间处于 Activity 状态(不要将 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 超时。 但它们只能在操作系统级别设置,不能在 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
值是秒数。
关于java - Apache HttpClient TCP Keep-Alive(套接字保活),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37165269/