`

Httpclient再续

阅读更多
参考:
http://wangxinchun.iteye.com/blog/2136254
http://wangxinchun.iteye.com/blog/2156660
http://wangxinchun.iteye.com/blog/2166837


最近所在的项目中准备把httpclient3换为httpcient4
有以下问题:
1、超时的设置。
httpclient3的设置比较简单:
		HttpClient httpClient = new HttpClient();
		httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connTimeoutMinis);
		httpClient.getHttpConnectionManager().getParams().setSoTimeout(readTimeoutMinis);



httpclient4的设置有两种:
1、全局的设置。
2、每次请求的设置。
优先级:每次请求的设置,会优先全局的设置。

		httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connTimeoutMinis);
		httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, readTimeoutMinis);


HttpGet httpGet = new HttpGet(url);
			httpGet.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connTimeoutMinis);
			httpGet.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, readTimeoutMinis);


从下面代码的取值顺序可以看出参数的优先级顺序
优先级代码如下:
public class ClientParamsStack {
    /** The application parameter collection, or <code>null</code>. */
    protected final HttpParams applicationParams;

    /** The client parameter collection, or <code>null</code>. */
    protected final HttpParams clientParams;

    /** The request parameter collection, or <code>null</code>. */
    protected final HttpParams requestParams;

    /** The override parameter collection, or <code>null</code>. */
    protected final HttpParams overrideParams;

public Object getParameter(String name) {
        if (name == null) {
            throw new IllegalArgumentException
                ("Parameter name must not be null.");
        }

        Object result = null;

        if (overrideParams != null) {
            result = overrideParams.getParameter(name);
        }
        if ((result == null) && (requestParams != null)) {
            result = requestParams.getParameter(name);
        }
        if ((result == null) && (clientParams != null)) {
            result = clientParams.getParameter(name);
        }
        if ((result == null) && (applicationParams != null)) {
            result = applicationParams.getParameter(name);
        }
        return result;
    }
}


2、htttclent3 和 httpclient4的比较。
性能:差异并不大
稳定性:httpclient4 提供了连接池管理,更加稳定,httpclient3 每次创建Httpclient,并发量如果不限制,容易导致系统崩溃。
例如:启动一个http服务,然后使用httpclient 持续循环请求,如果不限制并发,tomcat就会挂掉。

3、服务端端口状态解释

服务端,端口的状态变化
  先在本机(IP地址为:127.0.0.1:888)配置tomcat服务,然后在其它计算机(IP地址为:127.0.0.1)访问http服务,从cmd看看端口的状态变化。
1、LISTENING状态
  HTTP服务启动后首先处于侦听(LISTENING)状态。
  State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。

  
2、ESTABLISHED状态
  现在从本机访问一下888上的HTTP服务。  ESTABLISHED的意思是建立连接。表示两台机器正在通信。
下面显示的是本机的http服务正在被本机的众多连接请求,大部分连接建立了,但是都在传输数据。


  注意:处于ESTABLISHED状态的连接一定要格外注意,因为它也许不是个正常连接。后面我们要讲到这个问题。
3、 TIME_WAIT状态
  我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
TIME_WAIT的意思是结束了这次连接。说明888端口曾经有过访问,但访问结束了。


大部分连接都在等待。
4、SYN_SENT
SYN_SENT状态表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。
服务器已经挂掉,我继续请求这个接口,会导致大量的连接处于这个数据发送状态。

客户端会反馈:
org.apache.http.conn.HttpHostConnectException: Connection to http://127.0.0.1:888 refused
5、CLOSE_WAIT
    对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

状态之间的转换:



参考:
http://www.cnblogs.com/thinksasa/archive/2013/03/05/2944880.html
  • 大小: 27.9 KB
  • 大小: 253.4 KB
  • 大小: 118.6 KB
  • 大小: 105.3 KB
  • 大小: 43.2 KB
0
1
分享到:
评论

相关推荐

    .net c# 断点续传的客户端(winform)和服务端(mvc/webapi)实现

    在.NET C#编程环境中,断点续传是一项重要的技术,特别是在大文件传输中,它可以提高效率并节省网络资源。这个项目包含两个主要部分:客户端(WinForm)和服务器端(MVC/WebAPI)。以下是对这两个部分及其相关知识点...

    android 学习笔记6-HttpClient 多线程下载 断点续传 进度条 源码关联

    1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...

    httpclient jar

    - 随机访问和断点续传:通过`HttpEntity`接口,可以实现对大文件的分块传输。 - 自动处理重定向和重试:HttpClient可以自动处理服务器返回的3xx状态码,执行重定向操作,也可以根据策略自动重试失败的请求。 - 多...

    通过 HttpClient 下载 文件

    在实际应用中,我们可能需要处理更复杂的情况,比如分块下载、断点续传、多线程下载等。HttpClient虽然强大,但在处理这些问题时可能需要额外的库支持或者自定义逻辑。 通过阅读HttpClient的源码,我们可以了解其...

    httpClient帮助文档

    - **下载文件**:通过HttpClient下载远程文件,处理进度和断点续传。 通过HttpClient API帮助文档,开发者可以深入了解HttpClient的使用细节,提高HTTP请求处理的效率和可靠性。无论是进行Web服务调用,还是构建...

    java大文件分块上传断点续传demo

    大文件的上传可能会遇到网络不稳定、服务器超时等问题,因此,为了确保文件上传的可靠性和用户体验,通常会采用分块上传和断点续传的技术。本Java Demo就是针对这个问题提供的一种解决方案,它允许开发者将大文件...

    android httpclient文件上传 http协议post get方法向服务器传输数据

    3. **HTTPClient文件上传**:在Android中,HTTPClient支持文件上传,这在处理用户上传图片、音频等文件的场景中非常常见。文件上传通常涉及MultipartEntityBuilder,它允许我们将文件作为多部分实体的一部分发送。...

    Ruby-HttpClient在Ruby中提供类似libwwwperlLWP的功能

    8. **断点续传**:对于大文件下载,HttpClient支持断点续传,提高效率。 9. **异步请求**:通过回调或线程池,HttpClient可以实现非阻塞的异步请求,提高程序的并发性能。 10. **错误处理**:当发生网络错误或其他...

    httpclient4.5.5所需jar包和源码

    - **文件下载与上传**:HTTPClient支持断点续传和大文件分块上传,对文件操作提供了强大的支持。 - **身份验证**:它内置了多种认证机制,如Basic Auth、Digest Auth、NTLM等,能处理复杂的网络认证需求。 - **代理...

    用Java实现断点续传.txt

    ### 用Java实现断点续传的技术解析 #### 一、技术原理概述 断点续传是一种在网络连接不稳定或在下载过程中出现意外中断时能够继续完成下载的技术。它通过记录下载过程中断时的位置,当重新启动下载任务时,可以从...

    C# 大文件下载 断点续传

    在IT领域,大文件下载和断点续传是网络编程中的重要组成部分,特别是在客户端-服务器交互的应用中。本文将深入探讨使用C#语言实现大文件下载的断点续传技术,以及如何扩展功能,如多线程下载和任务导入导出。 首先...

    C# 断点续传下载文件 实例源码(网络操作)

    本实例源码着重于C#中的一个高级特性——断点续传下载文件,这在处理大文件下载时尤其有用,因为它允许用户在中断后从上次停止的位置继续下载,而不是重新开始。 断点续传技术的基本原理是通过记录已下载文件的部分...

    commons-httpclient

    3. **文件上传下载**:HttpClient可以用来上传文件到服务器,或者从服务器下载文件,支持断点续传。 4. **自动化测试**:在自动化测试场景中,HttpClient可以模拟用户行为,发送HTTP请求验证服务端的功能和性能。 ...

    HttpClient4.3模拟登陆新版12306

    - 处理Cookies:登录过程中,服务器会返回一些必要的Cookies,你需要保存并随后续请求一起发送。 3. **HttpClient使用步骤** - **初始化HttpClient**:创建一个CloseableHttpClient实例,通常会使用HttpClients....

    HTTPclient.jar

    6. **重试与断点续传**:当网络不稳定时,HTTPClient可以自动重试失败的请求,同时支持断点续传,用于大文件的上传和下载。 7. **Cookie管理**:对于需要保持会话状态的Web应用,HTTPClient能有效地管理和同步...

    安卓异步httpclient

    4. **支持文件上传和下载**:提供方便的方法来上传文件,比如图片或者音频,同时也支持大文件的断点续传和下载进度监听。 5. **错误处理**:对常见的网络错误,如连接超时、无网络连接等,提供了统一的错误处理机制...

    C#HTTP方式下载 断点续传 限制速度

    为了实现断点续传,需要检查本地文件是否存在,如果存在则读取已有的长度,然后从该位置开始下载。 3. **断点续传**: 断点续传允许我们在网络中断或程序意外退出后从上次停止的位置继续下载,而不是重新开始。在...

    使用Apache HttpClient实现多线程下载的小例子

    Apache HttpClient 是一个强大的 HTTP 客户端库,广泛用于 Java 开发中,它提供了丰富的功能,包括支持HTTP协议的各种...同时,注意在实际应用中,还需要考虑错误处理、断点续传、下载进度显示等功能,以提升用户体验。

    c/c++线程断点续传实现

    例如,你可以扩展`HttpClient`类,添加断点续传的相关逻辑。 最后,考虑到文件的分块下载,可以使用多线程并行下载不同的文件块,进一步提升下载速度。但这会增加实现的复杂性,需要处理线程同步和数据合并等问题。...

    httpclient.rar

    如果你正在学习或使用这个"Httpclient"库,建议先阅读其文档,了解其接口和用法,然后通过编写简单的示例来熟悉其工作原理,再逐步应用到实际项目中。 最后,"2132"标签可能是指这个资源的内部编号或分类,对于理解...

Global site tag (gtag.js) - Google Analytics