我們在進行網路應用程式開發時(主要是cs架構的應用程式)要面對很多異常情況的處理,這些異常中有些是伺服器端主動丟擲的異常,客戶端要按照事先約定好的規則分類處理;有些是客戶端進行引數合法性檢查產生的異常,需要提示給使用者知道;還有諸如網路連線異常、資料傳輸異常等等。要讓我們的網路程式框架有足夠的彈性,更好的適應未來需求的變化,我們非常有必要將這些異常做乙個細緻、精確的歸類。
依據我個人的開發經驗來看,網路應用程式開發過程中的異常主要可以分為3大類,分別是網路異常、本地異常和伺服器異常。
網路異常,指由於網路鏈路問題,無法和伺服器建立連線完成通訊,或者連線被異常中斷(包括傳送超時、接收超時等)導致服務無法完成等。產生這類異常的原因主要可以分為2類,一類是客戶端沒有接入網路,和任何機器都無法建立連線;另一類則是客戶端和指定伺服器的通訊鏈路不通,通常會產生10060錯誤碼,這個原因可能是伺服器故障或宕機造成無法響應客戶端連線請求,或者是由於通訊線路問題無法和伺服器建立連線(網路擁塞、跨地區、跨運營商裝置等原因引起)。對於第二類問題,我們通常可以採用重試機制,嘗試解決建立連線的問題,尤其是在網路高峰時段、伺服器負載過重的情況下,這種方式就顯得尤為重要。
伺服器異常,顧名思義,指通訊過程中伺服器端丟擲的異常,主要分為預定義異常和非預定義異常。預定義異常通常帶有異常碼、錯誤提示及附加引數等資訊,由客戶端和伺服器端協商確定,客戶端收到預定義異常時,需要根據具體的異常碼進行處理,比如賬戶異常時,需要彈出乙個賬戶密碼輸入對話方塊出來,使用者可以修改賬戶密碼後重試也可以取消操作;再如客戶端收到未購買vip服務異常時,需要彈出乙個帶有購買vip服務鏈結的對話方塊出來等等。非預定義異常是指伺服器應用未處理的異常,由webservice框架,或者直接由web容器丟擲的異常,產生這類異常可能是因為伺服器應用程式對可以預期的異常忘記進行處理(開發和測試過程中應解決),或者伺服器系統執行時產生了異常(系統負載過重、開啟檔案描述符個數過多等)。針對非預定義異常(我們假設非預定義異常均由伺服器系統執行時異常導致),我們也應該採用重試機制,這樣可以在一定程式上提高網路服務的成功率。
注意,這裡提到的網路異常、伺服器異常中的非預定義異常的定義,都是假設在服務應用程式**沒有錯誤的前提下進行的。正確的定義異常,對我們決定是否啟用重試機制非常重要,如果是伺服器端**錯誤,導致網路異常、或非預定義異常產生,客戶端即使重試1000次終究還是失敗!
CS應用程式開發中的異常處理
我們在進行網路應用程式開發時 主要是cs架構的應用程式 要面對很多異常情況的處理,這些異常中有些是伺服器端主動丟擲的異常,客戶端要按照事先約定好的規則分類處理 有些是客戶端進行引數合法性檢查產生的異常,需要提示給使用者知道 還有諸如網路連線異常 資料傳輸異常等等。要讓我們的網路程式框架有足夠的彈性,...
應用程式中的錯誤處理
典型的情況是應用的 執行在非保護模式下。由於應用的 不是被lua 呼叫的,lua根據上下文情況來捕捉錯誤的發生 也就是說,lua不能呼叫 setjmp 在這些情況下,當 lua遇到像 not enough memory 的錯誤,他不知道如何處理。他只能呼叫乙個 panic 函式退出應用。你可以使用 ...
基於TCP的 C S模式 網路應用程式
伺服器端程式實現步驟 1。建立套接字 socket 2。將套接字繫結到乙個本地位址和埠上 bind 3。將套接字設為監聽模式,準本接受客戶請求 listen 4。等待客戶請求到來 當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5。用返回的套接字和客戶端進行通訊 sen...