Go語言高併發與微服務實戰專題精講——遠端過程呼叫 RPC——服務端註冊實現原理分析

左扬發表於2024-04-20

遠端過程呼叫 RPC——服務端註冊實現原理分析

rpc server 程式碼參考我前一篇博文:https://www.cnblogs.com/zuoyang/p/18146870

RPC Server端的RPC程式碼架構主要由兩大部分構成:

      1. 第一部分是服務方法的註冊過程。在這個過程中,我們首先透過呼叫rpc.Register介面將服務物件(如示例中的StringService)的方法進行註冊。rpc.Register函式內部會利用反射機制,自動提取出服務物件中滿足RPC介面要求的方法(即那些接收兩個引數且返回error型別結果的方法),並將這些方法的資訊儲存在一個內部的方法對映表中。在我們的Server端程式碼中,rpc.Register(service)這行程式碼就完成了StringService中的ConcatDiff方法的註冊,使得這些方法可以被遠端呼叫。
      2. 第二部分是處理來自網路的RPC呼叫。Server端會監聽指定的埠(如示例中的:1234),等待客戶端的連線。一旦有客戶端連線成功,Server就會讀取傳入的資料包,解碼RPC請求,並根據請求中指定的方法名從方法對映表中查詢到對應的方法。然後,Server會透過反射呼叫該方法,將結果編碼後傳送回客戶端。在我們的Server端程式碼中,這部分邏輯是透過l.Accept()接受連線,並使用rpc.ServeConn(conn)來處理每一個RPC請求實現的。

關於第一部分的處理步驟,可以概括為以下幾個環節:

      1. 首先,透過rpc.Register(service)註冊StringService中的RPC方法,如Concat
      2. 接著,rpc包利用Go語言的反射功能,自動獲取已註冊方法的詳細資訊,如方法名、引數型別和返回值型別等。
      3. 最後,這些資訊被儲存在RPC伺服器的內部資料結構中,以便在處理客戶端的RPC呼叫時能夠快速定位和執行相應的方法。

相關文章