2011-03-07 89 views
0

我使用Socket類寫入和讀取函數。我用SocketTimeoutException - 異常後如何繼續

synchronized(socket){ 
.//write; 
//read; 
} 

我這樣做(重複)每50-1000毫秒。問題是有人(未知原因)拔掉電纜(我得到SocketTimeoutException)。當他再次插入時,我需要繼續。 怎麼辦?我是否需要關閉catch塊中的這個套接字並創建新的?或者是其他東西 ?

+0

閱讀心跳 – 2011-03-07 12:59:01

+0

'SocketTimeoutException'是一個致命的異常,如果你必須繼續,你需要一個新的連接,並可能保持已完成的狀態。 – bestsss 2011-03-07 22:52:46

回答

0

你不必做任何事情。繼續。如果得到任何其他異常,請關閉套接字並重新啓動(如果適用)。

0

我會創建一個願意接收SocketTimeoutException並重試的裝飾器實現。在實際傳遞異常之前,它可以重試一定次數,超過一定的時間間隔以指示「真實」(待定義)錯誤狀態。它甚至可以無限期地重試,如果你想。重試邏輯甚至可以封裝重新建立套接字,儘管超時並不足以滿足要求。

另一個選擇是CircuitBreaker模式,雖然它不是專爲您所描述的。 CircuitBreaker對於避免一段時間內可能發生的代價高昂的錯誤稍微好一些。