設計RPC框架時,客戶端調用出錯是直接拋出異常好,還是返回errcode好?
12-26
我的理解:
errcode簡單性能好,多語言支持方便,但是code很多的時候,客戶端需要分別處理,容易遺漏,問題可能會被埋藏起來發現不了。exception對客戶端更友好,代碼可以少寫很多if ... else ... 有預期外的錯誤可以及時發現。
大家怎麼看這個問題?跨語言的情形和不跨語言是否有不同?
反正在協議裡面你只有返回error和error附帶的所有信息,然後針對不同的語言可以有不同的做法,譬如說C語言你只能error然後寫一個GetRPCError函數讀詳細內容,C++和C#你就可以封裝成不同的exception類,Haskell直接就寫成CoMonad了,etc
如果你的RPC客戶端是同步的,那麼可以拋異常,用戶代碼能catch。
如果是非同步的,把結果通過回調告訴用戶代碼,那怎麼拋?誰來接?
還是 ErrorCode 吧,參考 rockeet/nark-rpc · GitHub 就是用 Error Code
盡量屏蔽C/S和本地調用兩種情景下客戶代碼的差異性吧
可能拋出異常更合適一些?
推薦閱讀:
※我國的 IT 培訓機構是否坑?
※程序員所積累的編程知識在十年後將有多少變得沒用?
※為什麼程序語言會存在解釋型或編譯型的限制?
※零基礎如何迅速學習前端?
※怎麼反駁大學老師說做軟體很簡單的觀點?
TAG:Web開發 | API | 編程 | 遠程過程調用協議RPCRemoteProcedureCallProtocol |