[Java] HttpClient有个古怪的stalecheck选项

本文探讨了stalecheck选项对HTTP请求的影响,指出在局域网环境中,关闭此选项可以提高性能并避免因使用已断开连接而导致的异常。文章还提供了关于如何管理连接池和监测断开连接的建议。

打开stale check会让每次http请求额外消耗15毫秒。而且stalecheck选项缺省是打开的。

这有必要吗????

在局域网里面调用web api service的时候会死人的。

 

http://stackoverflow.com/questions/11219325/why-does-defaulthttpclient-send-data-over-a-half-closed-socket
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
http://www.mail-archive.com/httpclient-users@hc.apache.org/msg02710.html

 

去查了一些资料,发现我们为了性能都应该关闭stalecheck。

有人建议java的httpClient需要在连接池里面加上一个idle monitor thread去把broken的连接去除掉。否则re-use的stale connection可能已经被server断开了,则会引起异常。

但是由于java的传统通讯方式是阻塞的,所以全局的idle monitor thread是无法通用的。为了支持大量连接,为每个连接配置一个monitor thread也是不可行的。

 

因此,apache httpClient的官方文档建议:

ClientConnectionManager#closeExpiredConnections()
ClientConnectionManager#closeIdleConnections()
调用者要自己定时调用上述两个方法之一,来减少broken stale connections

 

与此同时,调用者需要自己决定,当发现io exception的时候,是否要retry。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值