网站空间150m分级会员管理系统网站开发
news/
2025/9/28 18:56:48/
文章来源:
网站空间150m,分级会员管理系统网站开发,邵阳建设网站,中国建设银行的网站.说来惭愧#xff0c;从事互联网开发好些年了#xff0c;有些概念一直没有彻底搞清楚。其中之一就是,ttp client配置连接池的时候,maxConnectionsPerHost,和maxTotalConnections,在网上搜了一圈#xff0c;发现很多都讲的含含糊糊的。
作者#xff1a;资深开发讲技术 背景 …说来惭愧从事互联网开发好些年了有些概念一直没有彻底搞清楚。其中之一就是,ttp client配置连接池的时候,maxConnectionsPerHost,和maxTotalConnections,在网上搜了一圈发现很多都讲的含含糊糊的。
作者资深开发讲技术 背景
说来惭愧从事互联网开发好些年了有些概念一直没有彻底搞清楚。其中之一就是,ttp client配置连接池的时候,maxConnectionsPerHost,和maxTotalConnections,在网上搜了一圈发现很多都讲的含含糊糊的。而且有不少故障都是这两个参数设置不合理或者压根就没有设置maxConnectionsPerHost等等。
题外话我记得我刚参加工作的时候第一次使用http client。看见项目中配置的连接池有maxConnectionsPerHost我就请教同事这个参数是干啥的。他的答复是每条路由最大的连接数。我似懂非懂但是又不敢多问哈哈。
分析过程
maxTotalConnections很好理解。既然是一个连接池那么一个池子最大能放多少呢?这个参数默认是20。当然这个参数在不同的连接池实现中可能是不一样这不是我关注的重点。 maxConnectionsPerHost表示一个连接池中每条路由池化的最大连接个数。这个值默认是2我看过不少故障是没有设置此值导致的。这个不是我关注的重点我的疑问是什么是路由?什么是连接?路由和连接的关系是啥?
首先连接是什么?这个概念很清晰连接就是源ip源端口加目的ip:目的端口以及相关信息形成的逻辑概念。
那什么是路由呢?我的脑袋一团混乱。网上也没有比较好的文章能解答我的疑问。我的猜测是目的hostport端口就是路由。比如你的项目中需要访问百度。那么baidu.com80就是一条路由。同时也需要访问csdn,那么csdn.net80也是一条路由。可是这只是我的猜测。
那看看源码吧。不同版本的http client实现方式是不一样的。我手头的项目有3.x也有4.x的。我都简单看了下但是源码都有一个问题是route的实现类中既有host,也有localAddress。 为了继续解答我的疑问还是直接debug。简单写了一个单元测试类似这样。 然后我看到了这样的信息以3.x源码为例子4.x原理是一致的。 获取连接的过程HostConfiguration 虽然其中有本地的地址信息的但是值是空的。因此route真正起作用的是host。 获取好连接后检查下连接是不是打开了如果没有打开执行open方法此时会设置localAddress。也就是一条真正的连接才算创建完成。
接下来我们看下Http的连接池有数据的情况是啥样。 至此我们就清晰了连接池是以host(远端的服务例如baidu.com)为组来建立连接池。maxConnectionsPerHost 用来控制一组中连接池的个数也就是有些同学提到的用来控制访问某个服务并发的个数。
结论
maxConnectionsPerHost连接池是以host(远端的服务例如baidu.com)为组来建立连接池。此参数用来控制一组中连接池的个数或者用来控制访问某个服务并发的个数。
需要注意默认值是2如果不设置此值。但是流量变大那么线上故障就会等着你
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期科技领域知识
歌谣带你看java面试题
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921003.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!