我正在使用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毫秒超时。
套接字超时的情况也是如此,在5000ms内将睡眠放在doGet()中将会引发一个套接字超时,这将永远不会像配置的那样在60毫秒左右。它需要超过500毫秒。
任何人都可以建议如何配置HttpClient 4.1.2,使其超过配置的时间?