一個簡單RPC框架是如何煉成的(I)——開局篇
阿新 • • 發佈:2018-10-31
開場白,這是一個關於RPC的相關概念的普及篇系列,主要是通過一步步的調整,提煉出一個相對完整的RPC框架。
RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,基於C/S模型。網路上有一篇文章寫得不錯,可以去了解一下相關概念深入淺出RPC
這裡,直接使用一下上面作者的一個示意圖
總結下來就是有4塊核心內容
- RPC資料的傳輸。如上面的RPCConnector,RPCChannel。它們主要負責資料傳輸這一塊, 具體客戶端與伺服器之間的連線是不是socket連線,是原始tcp連線還是使用http,這些RPC協議本身不做任何規定。那麼我們的任務就是抽象出這樣一個傳輸層。
- RPC訊息。如上面的RPCProtocol, 以及encode,decode方法。 因為RPC是遠端呼叫,所以沒辦法直接函式呼叫,於是就必須用一套專門的協議,去表示呼叫以及呼叫結果。另外,因為實際應用基本都是跨機器連線,所以無法直接傳遞記憶體變數,也就是說還需要將訊息編碼成 諸如字串一類的可以跨裝置傳輸的內容。具體的RPC訊息的封裝協議很多,常見的是基於xml,json封裝的。那麼我們的任務就是抽象出這樣一個協議層。
- RPC服務註冊。如上面Callee -->export。 服務端具體支援哪些呼叫,收到來自客戶端的RPC請求後,怎樣去呼叫真正的需要執行的方法,這些內容也是一個完整的RPC框架必須考慮的。一些稍微高階一點的框架,都是可以服務自動註冊的,現在主流的RPC框架,還支援通過 IDL(Interface Definition Language)來定義遠端介面,實現跨語言的RPC 。那麼我們的任務就是抽象出一個RPC服務的註冊機制
- RPC訊息處理。如上面的RPCInvoker。這裡其實與RPC本身關係不大,一般就是考慮支援非同步/同步呼叫。 這一部分,大概我也會做一些說明,但不是這個系列的重點。