apache commons http客户端效率

Posted

技术标签:

【中文标题】apache commons http客户端效率【英文标题】:apache commons http client efficiency 【发布时间】:2011-03-04 03:16:41 【问题描述】:

我使用apache commons http客户端每秒通过post发送数据,有没有办法让下面的代码更有效率?我知道 http 是无状态的,但是我可以做些什么来改进,因为在这种情况下基本 url 总是相同的(只有参数值改变。

私人无效发送数据(字符串) 尝试 HttpClient 客户端 = getHttpClient(); HttpPost 方法 = new HttpPost("http://192.168.1.100:8080/myapp"); System.err.println("发送到服务器"+s); List formparams = new ArrayList(); formparams.add(new BasicNameValuePair("packet", s)); UrlEncodedFormEntity 实体 = new UrlEncodedFormEntity(formparams, "UTF-8"); 方法.setEntity(实体); HttpResponse resp=client.execute(method); 字符串 res = EntityUtils.toString(resp.getEntity()); System.out.println(res); 捕获(异常 e) e.printStackTrace(); 私有 HttpClient getHttpClient() 如果(httpClient==null) httpClient = new DefaultHttpClient(); 返回http客户端;

【问题讨论】:

对我来说看起来不错。你有理由不这么认为吗? 【参考方案1】:

如果您需要每秒发送请求并获得响应,那么是的,这就是您所能做的。但是,是的,它会使用相当多的资源。

另一种研究方法是Comet 方法,在该方法中,HTTP 连接对服务器保持打开状态,并通过该连接逐渐发送信息。 Here's an interesting article with examples.

【讨论】:

每秒一个 HTTP 请求算不了什么 - 它很难证明 Comet,IMO。 用户不会问他/她是否不关心。最好知道选项是什么。【参考方案2】:

使用多线程连接管理器,

http://hc.apache.org/httpclient-3.x/threading.html#MultiThreadedHttpConnectionManager

这将提高保持活动状态并提高连接每秒就绪的机会,因此您不必重新建立 TCP 连接。

【讨论】:

不错的指针,我可能无法使用这个类,因为我在支持有限版本的 apache commons http 客户端的 android SDK 上运行。

以上是关于apache commons http客户端效率的主要内容,如果未能解决你的问题,请参考以下文章

关于出现 org.apache.commons.lang.exception.NestableRuntimeException的解决方法

httpclient下载网页源码---java基础爬虫

org.apache.commons.lang.exception.NestableRuntimeException等缺少jar包的解决办法

Java 文件上传组件 Apache Commons FileUpload 应用指南(转)

SSL访问提示 no common encryption algorithm

org/apache/commons/discovery/tools/DiscoverSingleton