我用多线程执行了
HttpResponse response = httpClient.execute(httpost);这个方法。
一般的时候执行这个方法大概耗时200毫秒。但是有些时候执行这个方法大概耗时20秒。耗时长的时候,一般是并发比较大的时候,感觉服务器响应不过来所以慢。我不知道怎么能提高这个效率啊。
我尝试增加了一些参数提高效率 client.getParams().setBooleanParameter("http.tcp.nodelay", true);
// this.httpClient.getParams()
// .setIntParameter("http.socket.timeout", 5000);
// this.httpClient.getParams().setIntParameter("http.connection.timeout",
// 5000);
// client.getParams()
// .setParameter("http.connection.stalecheck", false);
如上~~但很基本没有效果。。麻烦大侠帮忙看看啊。有什么思路或者怎么做可以提高效率。
难道需要修改httpClient的execute方法吗?
HttpResponse response = httpClient.execute(httpost);这个方法。
一般的时候执行这个方法大概耗时200毫秒。但是有些时候执行这个方法大概耗时20秒。耗时长的时候,一般是并发比较大的时候,感觉服务器响应不过来所以慢。我不知道怎么能提高这个效率啊。
我尝试增加了一些参数提高效率 client.getParams().setBooleanParameter("http.tcp.nodelay", true);
// this.httpClient.getParams()
// .setIntParameter("http.socket.timeout", 5000);
// this.httpClient.getParams().setIntParameter("http.connection.timeout",
// 5000);
// client.getParams()
// .setParameter("http.connection.stalecheck", false);
如上~~但很基本没有效果。。麻烦大侠帮忙看看啊。有什么思路或者怎么做可以提高效率。
难道需要修改httpClient的execute方法吗?
解决方案 »
- win7 旗舰版安装oracle 11g不成功
- dos下运行java程序 Package的问题
- 菜鸟求解
- 字符流中read方法返回值是int,为什么输出是char?
- 我公司使用自行开发的web系统,调用的是java 1.4,如果只安装java1.5或6的话又不能正常使用,能否把1.5或6的版本设置成web系统认定调用的
- 关于TABLE单元格的TOOLTIP功能
- 怎样扫描局域网里Ip??(用 socket???)
- paintEvent怎么用??
- 使用CachedRowSet的问题
- 问个小问题
- httpclient 的问题啊~~~~~~~~~~~~~~~~~希望大家能帮助一下啊~~~~~~~~~~~~55555555555555555555555555
- httpclient请求问题啊~~~~2个月都没有解决啊~~~~~~~~~~~~~`55555555555求底层大虾指导一下啊
看下你服务端吧。
假如说你服务端1s只能处理200个请求,然后你不停的发请求,比如每秒多于200个,你的请求在服务端自然不停的积压,然后响应自然也就慢了,甚至超时。
如果不改服务端,建议缩下线程数,或者每次请求让线程睡一下,或者维护一个池子,一旦发现响应过慢,则减少线程数,或者干脆等把积压的请求全部处理完了,在继续提交任务
我知道啊,但是为什么其他人就可以发更多的帖子呢?我认为他们设置了什么参数让服务器优先选择了他们,
比如类似 client.getParams().setBooleanParameter("http.tcp.nodelay", true); 这样的参数啊
你要是想玩HTTP调用,就应该先把HTTP协议弄明白。
当然,TCP的基础知识也应该了解一些,才能编写出高效的通信程序。至于在HTTP协议中,通过设置参数,让服务器优先响应某个客户端的请求,我觉得这只能是猜想。
而且,以我的经验,一般的WEB服务端是没有这个功能的。
还有,参数调优的事情,要放在最后做,而不是在开发的时候做。至于怎么解决效率的问题,我在5楼已经说了,就不啰嗦了。
private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(20, 25,25,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(20),
new ThreadPoolExecutor.CallerRunsPolicy());
for (int i=0;i<21;i++) {
threadPool.execute(new ThreadPoolTask(HttpClientList.get(i), HttpPostList.get(i)));
}[13 19:30:51.909]#Thread.Id:[28]#..........##Url耗时:470 .毫秒
[13 19:30:55.569]#Thread.Id:[30]#..........##Url耗时:4080 .毫秒
[13 19:30:55.569]#Thread.Id:[41]#..........##Url耗时:4070 .毫秒
[13 19:30:55.569]#Thread.Id:[27]#..........##Url耗时:4140 .毫秒
[13 19:30:55.679]#Thread.Id:[39]#..........##Url耗时:4180 .毫秒
[13 19:30:55.899]#Thread.Id:[37]#..........##Url耗时:4400 .毫秒
[13 19:30:59.129]#Thread.Id:[36]#..........##Url耗时:7610 .毫秒
[13 19:30:59.139]#Thread.Id:[50]#..........##Url耗时:7640 .毫秒
[13 19:30:59.139]#Thread.Id:[38]#..........##Url耗时:7640 .毫秒
[13 19:30:59.359]#Thread.Id:[43]#..........##Url耗时:7860 .毫秒
[13 19:31:02.709]#Thread.Id:[47]#..........##Url耗时:11210 .毫秒
[13 19:31:02.709]#Thread.Id:[46]#..........##Url耗时:11210 .毫秒
[13 19:31:02.719]#Thread.Id:[42]#..........##Url耗时:11220 .毫秒
[13 19:31:02.909]#Thread.Id:[53]#..........##Url耗时:11410 .毫秒
[13 19:31:06.229]#Thread.Id:[49]#..........##Url耗时:14730 .毫秒
[13 19:31:06.239]#Thread.Id:[55]#..........##Url耗时:14740 .毫秒
[13 19:31:06.289]#Thread.Id:[35]#..........##Url耗时:14790 .毫秒
[13 19:31:06.439]#Thread.Id:[45]#..........##Url耗时:14940 .毫秒
[13 19:31:09.769]#Thread.Id:[56]#..........##Url耗时:18240 .毫秒
[13 19:31:09.769]#Thread.Id:[51]#..........##Url耗时:18270 .毫秒我发现执行效果大概是每4个一组,启动时间依此增加,每次差不多有5秒的间隔这个间隔太长了,我不知道是我哪里写错了。还是httpclient 和 HttpPost 有什么特性呢?