参见英文答案 >
With Apache HttpClient,why isn’t my connection timeout working?3
我想使用 HTTPClient运行线程安全的异步HTTP请求.我注意到它不尊重我的CONNECTION_TIMEOUT参数.
我想使用 HTTPClient运行线程安全的异步HTTP请求.我注意到它不尊重我的CONNECTION_TIMEOUT参数.
代码是ColdFusion / Java混合.
- client = loader.create("org.apache.http.impl.nio.client.DefaultHttpAsyncClient").init();
- CoreConnectionPNames = loader.create("org.apache.http.params.CoreConnectionPNames");
- client.getParams()
- .setIntParameter(JavaCast("string",CoreConnectionPNames.SO_TIMEOUT),10)
- .setIntParameter(JavaCast("string",CoreConnectionPNames.CONNECTION_TIMEOUT),10);
- client.start();
- request = loader.create("org.apache.http.client.methods.HttpGet").init("http://www.google.com");
- future = client.execute(request,javacast("null",""));
- try {
- response = future.get();
- }
- catch(e any) {}
- client.getConnectionManager().shutdown();
无论我为CONNECTION_TIMEOUT提供什么,请求总是返回200 OK.检查下面的输出.
>如何设置有效的连接超时?
> CONNECTION_TIMEOUT是否做任何事情?
产量
- 200 OK http://www.google.com/
- 200 OK http://www.google.com/
- [snip]
- 5 requests using Async Client in: 2308 ms
解决方法
apache的HttpClient的文档很多.在你的设置中尝试这个(对于我,版本4)
- HttpConnectionParams.setConnectionTimeout(params,10000);
- HttpConnectionParams.setSoTimeout(params,10000);
- ... set more parameters here if you want to ...
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- .. do whatever you ant with the scheme registry here ...
- ThreadSafeClientConnManager connectionManager = new ThreadSafeClientConnManager(params,schemeRegistry);
- client = new DefaultHttpClient(connectionManager,params);