我有與服務器通信的C++應用程序。它將一些數據發佈到服務器,當我處理服務器故障的異常時,我得到了這個問題。當服務器出現問題時,我需要處理連接拋出的異常,並嘗試重新連接到服務器。我已經發布了以下相關的僞代碼:異常處理問題
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
//handle error, reconnect and create a new session
}
我已經是,處理此異常的時候,我需要再重新連接並創建一個會話的關注。再次創建會話的代碼可能會引發異常。因此,錯誤處理代碼將再次有一個嘗試 - 原來catch塊catch塊,如下:
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
publisher->initialize();
publisher->openSocket();
try {
publisher->createSession();
} catch (const SessionException& tx) {
//session creation error
}
publisher->publishData(data);//after re-connecting, publish data again
}
我的問題是,是否確定有嵌套的嘗試 - 捕獲這樣嗎?否則這只是不好的設計?如果是這樣,那麼實現這一目標的最好方法是什麼?
PS .:我的代碼是C++,但我想這個問題是一般性的。 謝謝。
很確定'publisher'應該知道它需要重新連接。 – 2013-02-21 10:01:38
@PeterWood:請你多解釋一下? – Izza 2013-02-21 10:02:28
我認爲彼得意味着這種情況不應有任何例外。如果發佈者不能發佈數據,它應該嘗試自己重新連接,而不會拋出異常並讓一些外部實體重新連接。但這取決於你的代碼,它只是太小而不能提供一些建議。 – ixSci 2013-02-21 10:17:53