前一阵子发现我写的一个定时任务有问题。具体情况是我用apache commons HttpClient读其他一组机器的文件进行处理。为了避免一个定时任务耗时太多,使用下面的代码进行超时设置
client.getParams().setConnectionManagerTimeout(20 * 1000L); // 20秒
client.getParams().setSoTimeout(20 * 1000); // 20秒
但是后来发现有时会有请求超过100秒的情况出现,而且没有超时。
开始觉得很奇怪,为什么不会超时呢,难道是参数设置不正确?
测试了很久都没有发现什么问题,在jsp使用Thread.sleep(30000)就可以触发超时出现。但是为什么实际运行中会有超过100秒而不触发超时的情况呢?
后来使用下面的jsp进行测试终于发现了一种可能的原因
<%@page contentType="text/html" pageEncoding="GBK"%><%
long start = System.currentTimeMillis();
for (int i = 0; i < 12; i ++) {
out.println("不要超时");
out.flush();
Thread.sleep(10000L); // 10秒
}
out.println(System.currentTimeMillis() - start);
%>
原来SocketTimeout设置的超时是指指定时间内服务器端没有反应,而如果两次反应之间的时间间隔小于设置的值是不算超时的。想想也是,下载大文件的超时肯定不能拿整个时间来计算。
下面是文档中的说明
'http.socket.timeout': defines the socket timeout (SO_TIMEOUT) in milliseconds, which is
the timeout for waiting for data or, put differently,
a maximum period inactivity between two
consecutive data packets). A timeout value of zero is interpreted as an infinite timeout. This
parameter expects a value of type java.lang.Integer. If this parameter is not set read operations
will not time out (infinite timeout).
分享到:
相关推荐
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....
- `LICENSE.txt`:包含了Apache Commons HttpClient的许可协议,它遵循Apache 2.0许可证,允许免费使用和修改源代码。 - `README.txt`:一般提供了项目的简介和快速入门指南。 - `NOTICE.txt`:通常列出库中可能包含...
标题中的"org.apache.commons.httpclient相关架包"指的是这个库的一系列组件,主要包含在`httpclient.jar`文件中。这个JAR文件包含了HttpClient库的所有必需类和资源,可以被导入到Java项目中以实现HTTP通信功能。 ...
在标题"org.apache.commons.httpclient相关资源包"中,我们可以看出这是关于使用Apache HttpClient进行HTTP通信的知识点。Apache HttpClient库是Apache软件基金会的一个项目,它提供了对HTTP协议的全面支持,包括GET...
在实际开发中,HttpClient还可以与其他Apache Commons库,如IO和Lang,一起使用,以增强功能,例如处理输入/输出流,字符串操作等。 总的来说,Apache Commons HttpClient是一个强大的工具,提供了丰富的功能来处理...
《Apache Commons HttpClient 3.1 Java API详解》 Apache Commons HttpClient 3.1 是一个功能强大的Java HTTP客户端库,它提供了全面的HTTP协议支持,包括基本的GET和POST请求、Cookie管理、重定向处理以及HTTPS...
http://jakarta.apache.org/commons/httpclient/ org.apache.commons.httpclient.URI org.apache.commons.httpclient.Wire org.apache.commons.httpclient.Cookie org.apache.commons.httpclient.Header org.apache.commons...
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import java.io.FileOutputStream; import java.io.IOException; public class ServletTest { ...
《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...
然而,需要注意的是,随着Java社区的发展,现在Spring框架中的RestTemplate和最新的HttpClient(Java 11及更高版本)已经成为了更推荐的选择,尽管如此,Apache Commons HttpClient仍是一个值得学习和理解的优秀库,...
Apache Commons HttpClient是一个流行的Java库,专门用于执行HTTP客户端请求。这个资源包,"org.apache.commons.httpclient资源包(4.2)",是该库的一个特定版本,即4.2版,提供了对HTTP协议的强大支持,使开发者...
在"apache-commons-httpclient.jar"中,包含了以下关键知识点: 1. **HTTP请求**: HttpClient允许开发者构建复杂的HTTP请求,如设置请求头、添加POST参数、定义HTTP方法等。通过`HttpMethod`接口(如HttpGet、...
2. **commons-httpclient-3.0.1.jar**: 这就是Apache Commons HttpClient的核心库。这个版本3.0.1是该库的一个稳定版本,它包含了处理HTTP请求和响应的类和方法。HttpClient提供了异步和同步两种模式来发送GET、POST...
在httpclient4.x中没有commons-httpclient-3.0.jar,无法使用import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient....
2. 其他依赖库文件:commons-codec-1.3.jar,因为HttpClient依赖Apache Commons Codec库,用于编码解码操作。如果没有此库,运行时会出现NoClassDefFoundError错误。 3. 日志组件:commons-logging.jar,HttpClient ...
包括了httpclient的所有包,commons-httpclient3.0.jar,httpclient4.0.jar,commons-logging1.1.1.jar,commons-codec-1.3.jar等
这个RAR压缩包包含的是Apache Commons HttpClient的最新版本,即3.1.0版。HttpClient库是Apache软件基金会的一部分,它提供了一个强大的、高度可定制的HTTP客户端实现,适用于各种网络通信需求。 1. **HttpClient...
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class HttpClientExample { public static void main(String[] args) throws Exception { ...