本人在作接口功能自動化測試的過程當中遇到一個一個問題,若是請求過於頻繁後,總會報一個java.net.SocketException: socket closed異常,在研究完代碼以後發現了一個問題,在請求結束以後我作一個釋放釋放連接的方法。 很早以前寫的這個了,沒想到訪問量還挺高,爲了避免誤人子弟特地來補充:本人用的httpclient包是4.5.5,releaseConection()方法已經棄用了。用如今的PoolingHttpClientConnectionManager來管理鏈接池,不須要這個方法。java
異常想信息以下: java.net.SocketException: socket closed
下面是個人錯誤代碼:編程
request.releaseConnection();//此處容易形成socket close
我想了一下,查閱了一些資料,這個releaseconnection()的方法,是釋放該連接以後並不關閉,這樣這個連接就能夠重複使用了。官方的文檔中表達以下:json
This is a crucial step to keep things flowing. We must tell HttpClient that we are done with the connection and that it can now be reused. Without doing this HttpClient will wait indefinitely for a connection to free up so that it can be reused.
併發
翻譯過來的意思大概是,這個是資源流動利用的關鍵。必須告訴httpclient,這個連接釋放掉能夠被重複使用。使用這個方法的好處就是,不須要等待有一個空閒的httpclient才能執行下一個連接。框架
我代碼出現這個問題的緣由是在連接釋放後,服務端主動關閉了這個連接。我又查了一些資料,印證了本身的猜測,由於這個方法實在鏈接池使用的過程當中釋放連接的辦法,鏈接池管理器就會關閉這個連接重複讓別的請求使用。至此,問題找到了。socket