phxrpc是微信後臺團隊推出的一個非常簡潔小巧的RPC框架。
1 框架分析
rpc框架的基礎是網絡庫,網絡庫通用的設計思路其實很簡單。
- 網絡庫一般有兩個角色:一級包工頭;二級包工頭。兩者的關係是一級包工頭負責攬活,分配給二級包工頭。
- 一級包工頭裡一般都有個妹子做接待員(Acceptor),負責與外部客戶建立連接,也負責將任務通知到二級包工頭。
- 二級包工頭裡也有一個妹子和一幫小兄弟。妹子在調度中心工作,負責協調那幫小兄弟們高效有序的幹活。
現在按照這個思路看下phxrpc的網絡庫設計:(圖片較大,麻煩鼠標右鍵-在新標籤頁中打開圖片,這樣比較清楚)
- 一級包工頭是HshaServer,裡面的接待員妹子叫HshaServerAcceptor。
- HshaServerAcceptor負責將活分配給二級包工頭HshaServerUnit。
- 二級包工頭中在調度中心工作的妹子叫UThreadEpollScheduler,那幫小兄弟叫Worker,集中在一個叫WorkerPool的地方工作。UThreadEpollScheduler負責與 HshaServerAcceptor對接,然後將工作分配給WorkerPool中的Worker們。
2 輸入輸出流分析
從輸入輸出的角度繼續分析第一節中的示意圖(phxrpc設計框架-整體流程.jpg)。
- 客戶端輸入首先通過HshaServerAcceptor建立連接
- HshaServerAcceptor將accept文件操作符註冊到每個HshaServerUnit中的調度中心裡(也就是UThreadEpollScheduler)
- 調度中心的HandlerAcceptedFd()負責將接收到的請求放到請求隊列ThdQueue inqueue中
- Worker從ThdQueue inqueue中取請求進行處理,然後將處理完的結果放到返回隊列ThdQueue outqueue中
- 調度中心的ActiveSocketFunc()從返回隊列取結果進行處理
- 調度中心的HandlerAcceptedFd()將ActiveSocketFunc()的處理結果返回給客戶端
閱讀更多 路小飯 的文章