参考:
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
分享到:
相关推荐
1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...
本资源包含了断点续传功能的完整实现,包括客户端和服务端。服务端主要是实现支持断点续传,客户端其实就是一个下载器。
完整的java大文件分块上传支持断点续传,包含jar包,可以直接导入eclipse使用。
小小测试项目包含了4个知识点,其中包含了http协议向服务器传输数据的post和get方法,包含了httpclient传输方法,httpclient上传文件到服务器的方法,
C# 大文件下载 断点续传 类似迅雷的下载,可以自行实现多线程下载、任务导入导出、等功能
用Java实现断点续传.txt 用Java实现断点续传.txt 用Java实现断点续传.txt
C# 断点续传下载文件 实例源码(网络操作)
用apache fileupload 实现基于http协议的断点续传,断点上载, 含测试用的客户端
springboot 大文件上传,支持分片并发上传、断点续传、秒传,已经测试过1.2G的文件,最大支持理论无限制 博文链接:https://blog.csdn.net/haohao123nana/article/details/54692669
•HTTP实现替换HttpClient为UrlConnection, 更好的兼容Android 6.0, 自动解析回调泛型, 更安全的断点续传策略. •支持标准的Cookie策略, 区分domain, path... •事件注解去除不常用的功能, 提高性能. •数据库...
7、通过HttpClient从指定server获取数据 13 8、隐藏小键盘 13 9、响应Touch 15 10、Activity间的通信 15 1、Bundle传值 15 2、利用startActivityForResult与onActivityResult方法 16 11、使程序完全退出 18 12、列出...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略; 支持标准的Cookie策略, 区分domain, path; 事件注解去除不常用的功能, 提高性能; 数据库api简化提高性能, 达到和greenDao一致...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 2. 支持标准的Cookie策略, 区分domain, path... 3. 事件注解去除不常用的功能, 提高性能. 4. 数据库api简化提高性能, 达到和...
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 2. 支持标准的Cookie策略, 区分domain, path... 3. 事件注解去除不常用的功能, 提高性能. 4. 数据库api简化提高性能, 达到和...
传智播客_Andorid教程_20天从零到精通...2、使用httpclient提交get、post 3、使用开源项目提交参数 4、多线程下载,断点续传 5、Android实现多线程下载, 6、使用开源项目下载文件 更多教程源码联系qq 2369773854
httpclient IPC 中间件 多部分 护照 进步 重新定义控制器 日程 续例 静止的 单元测试 观景台 发展 运行测试 $ npm test 您可以使用--verbose显示更多信息 $ npm test -- --verbose 产生依赖关系 $ npm run ...
这个小程序是使用java语言编写的,使用的HttpClient框架进行网络传输,主要代码写了注释,希望可以帮助大家的学习