RPC 的主要功能目標是讓構建分佈式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。爲實現該目標,RPC 框架需提供一種透明調用機制讓使用者沒必要顯式的區分本地調用和遠程調用,在前文《淺出篇》中給出了一種實現結構,基於 stub 的結構來實現。下面咱們將具體細化 stub 結構的實現。框架
RPC 調用分如下兩種:異步
異步和同步的區分在因而否等待服務端執行完成並返回結果。分佈式
《淺出篇》給出了一個比較粗粒度的 RPC 實現概念結構,這裏咱們進一步細化它應該由哪些組件構成,以下圖所示。編碼
RPC 服務方經過 RpcServer
去導出(export)遠程接口方法,而客戶方經過 RpcClient
去引入(import)遠程接口方法。客戶方像調用本地方法同樣去調用遠程接口方法,RPC 框架提供接口的代理實現,實際的調用將委託給代理RpcProxy
。代理封裝調用信息並將調用轉交給RpcInvoker
去實際執行。在客戶端的RpcInvoker
經過鏈接器RpcConnector
去維持與服務端的通道RpcChannel
,並使用RpcProtocol
執行協議編碼(encode)並將編碼後的請求消息經過通道發送給服務方。代理
RPC 服務端接收器 RpcAcceptor
接收客戶端的調用請求,一樣使用RpcProtocol
執行協議解碼(decode)。解碼後的調用信息傳遞給RpcProcessor
去控制處理調用過程,最後再委託調用給RpcInvoker
去實際執行並返回調用結果。code