【gRPC】What is gRPC ?

介紹 gRPC 和 protocol buffers。

gRPC 可以使用 protocol buffers 作為其接口定義語言(Interface Definition Language)(IDL)和底層消息交換格式。

Overview

使用 gRPC,一個客戶端應(yīng)用程序能夠 直接調(diào)用 另一臺機器上的 服務(wù)應(yīng)用程序的方法,就好像它是本地對象一樣。這使更容易創(chuàng)建分布式應(yīng)用程序和服務(wù)。
與許多RPC系統(tǒng)一樣,gRPC基于定義服務(wù)的思想,指定可以被遠程調(diào)用的方法,方法的參數(shù)、返回類型。
服務(wù)端,服務(wù)端實現(xiàn)這個接口,運行一個gRPC服務(wù)去處理客戶端調(diào)用。
客戶端,客戶端有一個存根,它提供與服務(wù)器相同的方法。


gRPC客戶機和服務(wù)器可以在各種環(huán)境中運行并相互通信。
例如,你可以使用java創(chuàng)建一個 gRPC 服務(wù),使用 Go, Python 或者 Ruby 創(chuàng)建客戶端。
除此之外,最新的 Google APIs 將會有 gRPC 版本的接口,你可以輕松的將 Google 的功能構(gòu)建到你的應(yīng)用程序中。

Working with Protocol Buffers

默認情況下,gRPC使用 Protocol Buffers,Googel 成熟的 結(jié)構(gòu)化數(shù)據(jù) 序列化的開源機制(雖然也可是使用其它數(shù)據(jù)格式,像 JSON)。

  1. 第一步,在 proto 文件(一個普通的文本文件,使用 .proto 擴展名)中定義 你想要序列化的數(shù)據(jù)結(jié)構(gòu)。
    protocol buffer 數(shù)據(jù)被構(gòu)造為 message,其中每條 message 都是包含一系列鍵值對(稱為字段)的信息的小的邏輯記錄,例如:

    message Person {
      string name = 1;
      int32 id = 2;
      bool has_ponycopter = 3;
    }
    
  2. 一旦你定義好你的數(shù)據(jù)結(jié)構(gòu),就使用 protocol buffer 的編譯器 protoc,根據(jù)你的proto定義生成你首選語言對應(yīng)的數(shù)據(jù)訪問類。它們?yōu)槊總€字段提供簡單的訪問器,像 name() 、set_name(),以及將整個結(jié)構(gòu) 序列化/反序列化為原始字節(jié)的方法。
    例如,你選擇的語言是 C++,在第一步的示例上運行編譯器,將會生成一個叫做 Person 的類,你可以在應(yīng)用程序中使用這個類,用于填充、序列化、檢索 Person 協(xié)議緩沖區(qū)消息。

  3. 在普通的 proto 文件中定義 gRPC 服務(wù),并將 RPC 方法參數(shù)、返回類型 定義為 protocol buffer messages:

    service Greeter {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloReply {
      string message = 1;
    }
    

    gRPC使用 protoc 和一個特殊的gRPC插件從 .proto文件 生成代碼:生成 gRPC客戶端 和 服務(wù)器 代碼,以及用于填充、序列化和檢索消息類型的常規(guī)協(xié)議緩沖區(qū)代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容