httpclient连接池管理

随着微服务的留下,服务之间的http调用越来越多。在java里面我们可以使用httpclient这个开源工具类来进行处理,但若使用不当,可能性会比较差,尤其是连接池是否能正常使用,接下来会详细分析下httpclient的连接池原理。

(1)使用httpclient的好处

  a)降低延迟:如果不采用连接池,每次连接发起http请求的时候都会重新建立tcp链接(经历三次握手),用完就会关闭连接(4次握手),如果采用连接池则减少了这部分时间损耗。

 b) 支持更大的并发:如果不用连接池,则每次连接都会打开一个端口,在大并发的情况下系统的端口资源很快就会被用完,导致无法建立新的连接。采用连接池来管理长连接,可以复用之前的连接,而我们使用httpclient,有可能是两个集群之间的调用,也就是有限的机器之间进行调用。这样复用连接池能有效地节约资源。

(2)长连接和短链接

因为httpclient连接池都是管理的基于长连接的socket连接。所以介绍下长连接和短链接的区别。首先需要收下http keep-alived与 tcp keep-alive的区别,不是一回事,意图不一样。http keep-alived是为了让tcp活的更久点,以便在同一个链接上传送多个http,提高socket的效率。而tcp的keep-alived是一种检测tcp连接状况的保鲜机制。tcp keep-alived保鲜定时器,支持三个系统内核配置参数:

tcp_keepalived_time

tcp_keepalived_intvl

tcp_keepalived_probes

keepalived 是tcp的保鲜定时器,当网络两端建立了tcp连接之后,闲置了IDLE了tcp_keepalived_time之后,服务器内核就会尝试向客户端发送侦测包,来判断tcp连接状况。如果没有收到对方的回到,则会在tcp_keepalived_intvl后再次尝试发送侦测包,直到收到对方多大ack,如果一直没有对方的ack,一共尝试tcp_keepalived_probes次,每次的建个在这里分别是15s,如果尝试了tcp_keepalived_probes次之后还是没有回复,则会丢弃tcp连接。

猜你喜欢

转载自blog.csdn.net/yzh_2017/article/details/78575250