`

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
分享到:
评论

相关推荐

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

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

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

    本资源包含了断点续传功能的完整实现,包括客户端和服务端。服务端主要是实现支持断点续传,客户端其实就是一个下载器。

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

    完整的java大文件分块上传支持断点续传,包含jar包,可以直接导入eclipse使用。

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

    小小测试项目包含了4个知识点,其中包含了http协议向服务器传输数据的post和get方法,包含了httpclient传输方法,httpclient上传文件到服务器的方法,

    C# 大文件下载 断点续传

    C# 大文件下载 断点续传 类似迅雷的下载,可以自行实现多线程下载、任务导入导出、等功能

    用Java实现断点续传.txt

    用Java实现断点续传.txt 用Java实现断点续传.txt 用Java实现断点续传.txt

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

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

    用apache fileupload 实现基于http协议的断点续传,断点上载,含测试用的客户端

    用apache fileupload 实现基于http协议的断点续传,断点上载, 含测试用的客户端

    springboot大文件分片上传

    springboot 大文件上传,支持分片并发上传、断点续传、秒传,已经测试过1.2G的文件,最大支持理论无限制 博文链接:https://blog.csdn.net/haohao123nana/article/details/54692669

    xutils3.1.0

    •HTTP实现替换HttpClient为UrlConnection, 更好的兼容Android 6.0, 自动解析回调泛型, 更安全的断点续传策略. •支持标准的Cookie策略, 区分domain, path... •事件注解去除不常用的功能, 提高性能. •数据库...

    Android开发资料合集--续

    7、通过HttpClient从指定server获取数据 13 8、隐藏小键盘 13 9、响应Touch 15 10、Activity间的通信 15 1、Bundle传值 15 2、利用startActivityForResult与onActivityResult方法 16 11、使程序完全退出 18 12、列出...

    xUtils3-master

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao...

    xUtils 3.2

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的...

    xUtils3.jar最火的网络框架

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略; 支持标准的Cookie策略, 区分domain, path; 事件注解去除不常用的功能, 提高性能; 数据库api简化提高性能, 达到和greenDao一致...

    xUtils3-3.2.2

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的...

    xutils-3.1.0.jar包下载

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 2. 支持标准的Cookie策略, 区分domain, path... 3. 事件注解去除不常用的功能, 提高性能. 4. 数据库api简化提高性能, 达到和...

    xutils 3.1.2最新版本jar包下载

    HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 2. 支持标准的Cookie策略, 区分domain, path... 3. 事件注解去除不常用的功能, 提高性能. 4. 数据库api简化提高性能, 达到和...

    传智播客_Andorid教程_20天从零到精通Android开发视频_第09天

    传智播客_Andorid教程_20天从零到精通...2、使用httpclient提交get、post 3、使用开源项目提交参数 4、多线程下载,断点续传 5、Android实现多线程下载, 6、使用开源项目下载文件 更多教程源码联系qq 2369773854

    examples:将所有鸡蛋示例存储在一个地方

    httpclient IPC 中间件 多部分 护照 进步 重新定义控制器 日程 续例 静止的 单元测试 观景台 发展 运行测试 $ npm test 您可以使用--verbose显示更多信息 $ npm test -- --verbose 产生依赖关系 $ npm run ...

    断点下载.rar

    这个小程序是使用java语言编写的,使用的HttpClient框架进行网络传输,主要代码写了注释,希望可以帮助大家的学习

Global site tag (gtag.js) - Google Analytics