打開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/[email protected]/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。