2010-08-25 62 views
1

發生連接錯誤時最佳工作流程是什麼。 假設我們有一個連接到中間層的客戶端。處理連接錯誤的最佳做法

class MyClient{ 
... 
    void callServer(){ 
    try{ 
     middletier.saveRecord(123); 
    }catch(...){ 
     // log the error 
     // what to do next (notify the user, take the same step again)? 
     // reinitialize connection ? 
    } 
    } 
} 

怎麼做,如果連接出現錯誤(超時,連接斷開...)

我應該通知的連接有問題,並再次嘗試用戶? 是否可以自動完成,對用戶透明?

我喜歡的是,不要打擾用戶的錯誤,然後告訴用戶下一步該做什麼。
那麼處理這類錯誤的最佳工作流程是什麼?

回答

2

這取決於...如果動作是由用戶交互引起通知用戶。用戶可以決定他想要重試的頻率。該代碼可能會自行重試,但如果是超時,則用戶可能會等待幾分鐘(或中止未獲取任何反饋的操作)。

如果是後臺任務,請在延遲後重試(但不是無限 - 最終放棄操作)。您可以重新初始化連接以確保連接,這取決於使用的技術以及連接池。

當然,如果你想投入更多的時間,你可以以不同的方式處理不同的錯誤。首先,區分永久性錯誤(在幾分鐘內重試將無助於)間歇性錯誤(下次可能會出現問題)。例如,如果連接斷開,您可以重新嘗試一個新連接(可能由於不活動,防火牆會斷開打開的連接)。但你可能無法做任何關於超時(可能是網絡配置問題)或「HTTP 404 Not found」(假設你不能更改用於HTTP調用的URL)。

您可以在「診斷&修復」組件中收集所有這些知識。

我也推薦閱讀「發佈!」。

2

這完全取決於應用需求。有時最好立即通知用戶,有時在通知用戶之前多次重試請求會更好。您必須諮詢您的客戶/分析師。

+0

我的客戶不知道這一點。他們要求我提供最好的解決方案。這就是我爲什麼要問個人最佳實踐的原因。 – darpet 2010-08-25 10:42:45

0

從調用者的角度看MyClient:一般來說,失敗的方法調用應使MyClient處於調用之前的狀態。這意味着你應該小心如何恢復前middletier.saveRecord(123);