HttpClient POST 请求每次响应延迟3秒问题

来源:互联网 发布:旧java se 6 for mac 编辑:程序博客网 时间:2024/06/03 16:55

最近做项目遇到一个非常奇怪的问题,当我使用HttpClient包向微信服务器发送post消息时,每一笔的处理时间都达到了3秒多钟。经过分析日志发现,每次调用execute方法时,都需要3秒左右的时间也就是说在连接建立之后给微信发送通知居然还需要3s钟。而且根据日志,可以发现所有的发往微信服务器的请求无一例外都是3s多一点的时间,这个让人有一种在应用中sleep了3秒的感觉。

遇到这个问题后,首先第一反应是网络是不是出现了问题或是微信服务器强制sleep我的请求,因此用curl命令带参数执行post请求:

curl -d "post data"  微信服务器地址

发现微信服务器秒回,这样基本上排除了网络原因,接下来就要看是不是微信服务器的原因了。

为了排除所有应用逻辑的影响,我单独将使用HttpClient发送post请求的实现拉出来,做成了一个可以执行的jar包,然后带上参数执行,发现这次执行的时间居然和应用

执行的时间相近。这样就排除了应用逻辑对于请求时间的影响了。经过上述分析,目前基本上将问题定位在HTTPClient和微信服务器上。

为了进一步缩小问题的范围,我们自己写了一个服务器用于接收post请求,然后执行上面提到的jar包,这次发现服务器快速返回了。

这下问题来了,难道微信服务器真的有问题,但腾讯这么大一公司,微信公众号接了那么多公司企业,出现问题的可能性绝对是非常小的,何况使用curl也能个快速返回,而且为了进一步排除微信服务器的问题,我们用HttpURLConnection也写了一个可以执行的jar包来发送post请求,然后执行,有趣的事情发生了,这次居然也快速返回了。

下面总结一下:首先使用HttpClient的方式向微信服务post相应时间慢,向自己写的服务器post响应时间快。使用curl和HttpURLConnection向微信服务器post请求响应都快。

这下只能说明HttpClient和微信服务之间通信过程中肯定存在什么特殊的设置导致微信服务响应过慢。

后来经过他人反馈,在网上找到了这么一篇文章: HttpClient4.01请求特别慢的原因,然后查看我们自己的包装类,果然发现我们启用了expectContinue这个参数。

定位到这个问题后,我们就将包装类中的设置关掉,然后重现打包再执行,这次响应就跟curl和HttpURLConnnection一样了。

原创粉丝点击