泉州做网站seo,解决做网站问题,网站框架搭建设计,广州企业网在HTTP/1.0中keep-alive不是标准协议#xff0c;客户端必须发送Connection:Keep-Alive来激活keep-alive连接。https://www.imooc.com/article/31231HTTP协议是无状态的协议#xff0c;即每一次请求都是互相独立的。因此它的最初实现是#xff0c;每一个http请求都会打开一个… 在HTTP/1.0中keep-alive不是标准协议客户端必须发送Connection:Keep-Alive来激活keep-alive连接。 https://www.imooc.com/article/31231 HTTP协议是无状态的协议即每一次请求都是互相独立的。因此它的最初实现是每一个http请求都会打开一个tcp socket连接当交互完毕后会关闭这个连接。 HTTP协议是全双工的协议所以建立连接与断开连接是要经过三次握手与四次挥手的。显然在这种设计中每次发送Http请求都会消耗很多的额外资源即连接的建立与销毁。 于是HTTP协议的也进行了发展通过持久连接的方法来进行socket连接复用。 从图中可以看到 在串行连接中每次交互都要打开关闭连接在持久连接中第一次交互会打开连接交互结束后连接并不关闭下次交互就省去了建立连接的过程。 持久连接的实现有两种HTTP/1.0的keep-alive与HTTP/1.1的持久连接。 HTTP/1.1的连接默认情况下都是持久连接。如果要显式关闭需要在报文中加上Connection:Close首部。不发送Connection:Close不意味着服务器承诺连接永远保持打开。即在HTTP/1.1中所有的连接都进行了复用。 HttpClien中使用了连接池来管理持有连接同一条TCP链路上连接是可以复用的。HttpClient通过连接池的方式进行连接持久化。 其实“池”技术是一种通用的设计其设计思想并不复杂 当有连接第一次使用的时候建立连接结束时对应连接不关闭归还到池中下次同个目的的连接可从池中获取一个可用连接定期清理过期连接 如下在HttpClient4.4版本之前在从连接池中获取重用连接的时候会检查下是否过期过期则清理。 之后的版本则不同会有一个单独的线程来扫描连接池中的连接发现有离最近一次使用超过设置的时间后就会清理。默认的超时时间是2秒钟。 总结 HTTP协议通过持久连接的方式减轻了早期设计中的过多连接问题持久连接有两种方式HTTP/1.0的Keep-Avlive与HTTP/1.1的默认持久连接HttpClient通过连接池来管理持久连接连接池分为两个一个是总连接池一个是每个route对应的连接池默认连接重用策略与HTTP协议约束一致根据response先判断Connection:Close则关闭在判断Connection:Keep-Alive则开启最后版本大于1.0则开启只有在HttpClientBuilder中手动开启了清理过期与空闲连接的开关后才会清理连接池中的连接HttpClient4.4之后的版本通过一个死循环线程清理过期与空闲连接该线程每次执行都sleep一会以达到定期执行的效果转载于:https://www.cnblogs.com/ww-xiaowei/p/10059197.html