微信phxrpc源碼分析(一)-網絡庫框架分析

phxrpc是微信後臺團隊推出的一個非常簡潔小巧的RPC框架。

1 框架分析

rpc框架的基礎是網絡庫,網絡庫通用的設計思路其實很簡單。

微信phxrpc源碼分析(一)-網絡庫框架分析

rpc-server設計.jpg


  • 網絡庫一般有兩個角色:一級包工頭;二級包工頭。兩者的關係是一級包工頭負責攬活,分配給二級包工頭。
  • 一級包工頭裡一般都有個妹子做接待員(Acceptor),負責與外部客戶建立連接,也負責將任務通知到二級包工頭。
  • 二級包工頭裡也有一個妹子和一幫小兄弟。妹子在調度中心工作,負責協調那幫小兄弟們高效有序的幹活。

現在按照這個思路看下phxrpc的網絡庫設計:(圖片較大,麻煩鼠標右鍵-在新標籤頁中打開圖片,這樣比較清楚)

微信phxrpc源碼分析(一)-網絡庫框架分析

phxrpc設計框架-整體流程.jpg


  • 一級包工頭是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()的處理結果返回給客戶端


分享到:


相關文章: