搜索系统16:从HttpClient学习连接池
Posted 中中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索系统16:从HttpClient学习连接池相关的知识,希望对你有一定的参考价值。
一.HttpClient请求的一般过程
1.拿连接
2.与服务器建立连接(new Socket)
3.从服务获取结果
4.keepAlive的判断
在代码org.apache.http.impl.execchain.MainClientExec里请求结束后(requestExecutor.execute),用策略模式来判断是否keepAlive
if (reuseStrategy.keepAlive(response, context))
从以下实现可以看出,keepAlive的标志是从Response的Header中取得的
还有最后一句,如果header里没,http版本号大于1.0,也会保持连接。
如果没有keepAlive那么就会执行connHolder.markNonReusable,这个就是把ConnectHolder的reusable置为false。不过我测试了很多的网站,都返回了Keep-Alive,应该都可以保持连接一段时间。
5.归还连接
在ConnectionHolder类里可以看到以下代码:
如果reusable=false,也就是没有keepalive,就会关闭连接。
二、http请求头的格式怎么获取?
以访问https://www.baidu.com为例:
在代码org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer方法内打断点
再看一下这个HttpRoute对象的hashcode方法,恩,就是这些因素决定了是不是同一个请求。
以上是关于搜索系统16:从HttpClient学习连接池的主要内容,如果未能解决你的问题,请参考以下文章