`
蓝皮鼠
  • 浏览: 10719 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

关于apache commons HttpClient的SocketTimeout误会

阅读更多
前一阵子发现我写的一个定时任务有问题。具体情况是我用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).
0
0
分享到:
评论

相关推荐

    可用org.apache.commons.httpclient-3.1.0.jar.zip

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....

    org.apache.commons.httpclient-3.1.jar

    - `LICENSE.txt`:包含了Apache Commons HttpClient的许可协议,它遵循Apache 2.0许可证,允许免费使用和修改源代码。 - `README.txt`:一般提供了项目的简介和快速入门指南。 - `NOTICE.txt`:通常列出库中可能包含...

    org.apache.commons.httpclient相关架包

    标题中的"org.apache.commons.httpclient相关架包"指的是这个库的一系列组件,主要包含在`httpclient.jar`文件中。这个JAR文件包含了HttpClient库的所有必需类和资源,可以被导入到Java项目中以实现HTTP通信功能。 ...

    org.apache.commons.httpclient相关资源包

    在标题"org.apache.commons.httpclient相关资源包"中,我们可以看出这是关于使用Apache HttpClient进行HTTP通信的知识点。Apache HttpClient库是Apache软件基金会的一个项目,它提供了对HTTP协议的全面支持,包括GET...

    org.apache.commons.httpclient

    在实际开发中,HttpClient还可以与其他Apache Commons库,如IO和Lang,一起使用,以增强功能,例如处理输入/输出流,字符串操作等。 总的来说,Apache Commons HttpClient是一个强大的工具,提供了丰富的功能来处理...

    commons-httpclient-3.1 java API详细index格式文档

    《Apache Commons HttpClient 3.1 Java API详解》 Apache Commons HttpClient 3.1 是一个功能强大的Java HTTP客户端库,它提供了全面的HTTP协议支持,包括基本的GET和POST请求、Cookie管理、重定向处理以及HTTPS...

    commons-httpclient-3.1jar包下载

    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...

    org.apache.commons.httpclient 远程下载文件

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import java.io.FileOutputStream; import java.io.IOException; public class ServletTest { ...

    commons-httpclient-3.1jar包

    《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...

    commons-httpclient.rar

    然而,需要注意的是,随着Java社区的发展,现在Spring框架中的RestTemplate和最新的HttpClient(Java 11及更高版本)已经成为了更推荐的选择,尽管如此,Apache Commons HttpClient仍是一个值得学习和理解的优秀库,...

    org.apache.commons.httpclient资源包(4.2)

    Apache Commons HttpClient是一个流行的Java库,专门用于执行HTTP客户端请求。这个资源包,"org.apache.commons.httpclient资源包(4.2)",是该库的一个特定版本,即4.2版,提供了对HTTP协议的强大支持,使开发者...

    apache-commons-httpclient.jar

    在"apache-commons-httpclient.jar"中,包含了以下关键知识点: 1. **HTTP请求**: HttpClient允许开发者构建复杂的HTTP请求,如设置请求头、添加POST参数、定义HTTP方法等。通过`HttpMethod`接口(如HttpGet、...

    commons-httpclient相关jar包

    2. **commons-httpclient-3.0.1.jar**: 这就是Apache Commons HttpClient的核心库。这个版本3.0.1是该库的一个稳定版本,它包含了处理HTTP请求和响应的类和方法。HttpClient提供了异步和同步两种模式来发送GET、POST...

    commons-httpclient-3.0.jar

    在httpclient4.x中没有commons-httpclient-3.0.jar,无法使用import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient....

    ApacheCommons-HTTPClient组件的应用.doc

    2. 其他依赖库文件:commons-codec-1.3.jar,因为HttpClient依赖Apache Commons Codec库,用于编码解码操作。如果没有此库,运行时会出现NoClassDefFoundError错误。 3. 日志组件:commons-logging.jar,HttpClient ...

    commons-httpclient依赖包

    包括了httpclient的所有包,commons-httpclient3.0.jar,httpclient4.0.jar,commons-logging1.1.1.jar,commons-codec-1.3.jar等

    最新org.apache.commons.httpclient.rar

    这个RAR压缩包包含的是Apache Commons HttpClient的最新版本,即3.1.0版。HttpClient库是Apache软件基金会的一部分,它提供了一个强大的、高度可定制的HTTP客户端实现,适用于各种网络通信需求。 1. **HttpClient...

    commons-httpclient-3.0.jar JAVA中使用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 { ...

Global site tag (gtag.js) - Google Analytics