我正在使用 HttpClient 4.1.2。将 ConnectionTimeout 和 SocketTimeout 设置为一个值永远不会生效。
代码:
Long startTime = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 30);
HttpConnectionParams.setSoTimeout(params, 60);
HttpGet httpget = new HttpGet("http://localhost:8080/Test/ScteServer");
try {
startTime = System.currentTimeMillis();
HttpResponse response = httpClient.execute(httpget);
}
catch(SocketTimeoutException se) {
Long endTime = System.currentTimeMillis();
System.out.println("SocketTimeoutException :: time elapsed :: " + (endTime-startTime));
se.printStackTrace();
}
catch(ConnectTimeoutException cte) {
Long endTime = System.currentTimeMillis();
System.out.println("ConnectTimeoutException :: time elapsed :: " + (endTime-startTime));
cte.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
Long endTime = System.currentTimeMillis();
System.out.println("IOException :: time elapsed :: " + (endTime-startTime) );
e.printStackTrace();
}
如果服务器关闭,则连接超时永远不会超过 400 毫秒,而它必须按照配置在 ~ 30 毫秒处超时。
套接字超时也是如此,在 doGet() 中 hibernate 5000 毫秒将引发套接字超时,该超时永远不会达到配置的 60 毫秒左右。需要 500 多毫秒。
谁能建议如何配置 HttpClient 4.1.2 以便它在配置的时间左右超时?
最佳答案
HttpConnectionParams
需要传递给连接管理器(参见 this question )。使用 DefaultHttpClient
时,您可以像这样设置这些参数:
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000);
参见 documentation还有!
关于Java : HttpClient 4. 1.2 : ConnectionTimeout, SocketTimeout 值设置无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725492/