我有那段代码:
while(!lastPage && currentPage < maxPageSize){
StringBuilder request = new StringBuilder("http://catalog.bizrate.com/services/catalog/v1/us/" + " some more ...");
currentPage++;
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
client.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
GetMethod get = new GetMethod(request.toString());
HostConfiguration configuration = new HostConfiguration();
int iGetResultCode = client.executeMethod(configuration, get);
if (iGetResultCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + get.getStatusLine());
return;
}
XMLStreamReader reader
= XMLInputFactory.newInstance().createXMLStreamReader(get.getResponseBodyAsStream());
while (reader.hasNext()) {
int type = reader.next();
// some more xml parsing ...
}
reader.close();
get.releaseConnection();
}
不知何故,代码在网上不时出现问题:执行请求。
我无法找到请求超时的配置(不是连接超时),有人可能会帮助我,还是有些事我做错了?
我正在使用的client。
答案 0 :(得分:3)
您也可以使用setSoTimeout()
设置套接字读取时间,但这也不能保证。
唯一的解决方案是在不同的线程中运行请求并在超时后中断线程。您可以使用FutureTask来执行此操作。有关示例,请参阅我对此问题的回答,
答案 1 :(得分:-1)
PoolingConnectionManager
在每个路由和总计上保持最大连接限制。默认情况下,此实现将为每个给定路由创建不超过2个并发连接,并且总共不再有20个连接。对于许多实际应用程序而言,这些限制可能过于严格,特别是如果它们使用HTTP作为其服务的传输协议。但是,可以使用HTTP参数调整连接限制。
有关更多信息,请参阅PoolingClientConnectionManager
Java API