gRPC 簡介
gRPC 和 protocol buffers 的介紹。
gRPC 簡介
此頁面將介紹 gRPC 和 protocol buffers。gRPC 可以使用 protocol buffers 作為其介面定義語言(IDL)和底層訊息交換格式。如果您是 gRPC 和/或 protocol buffers 的新手,請閱讀此頁!如果您只想先深入了解 gRPC 的實際運作,請選擇一種語言並嘗試其「快速入門」。
概觀
在 gRPC 中,用戶端應用程式可以直接呼叫不同機器上伺服器應用程式的方法,就像它是本機物件一樣,讓您更容易建立分散式應用程式和服務。與許多 RPC 系統一樣,gRPC 是基於定義服務的概念,指定可以遠端呼叫的方法及其參數和傳回類型。在伺服器端,伺服器實作此介面並執行 gRPC 伺服器來處理用戶端呼叫。在用戶端,用戶端有一個存根(在某些語言中僅稱為用戶端),該存根提供與伺服器相同的方法。
gRPC 用戶端和伺服器可以在各種環境中執行並相互通訊,從 Google 內部的伺服器到您自己的桌面,並且可以使用任何 gRPC 支援的語言編寫。因此,例如,您可以輕鬆地使用 Java 建立 gRPC 伺服器,並使用 Go、Python 或 Ruby 建立用戶端。此外,最新的 Google API 將具有其介面的 gRPC 版本,讓您可以輕鬆地將 Google 功能建置到您的應用程式中。
使用 Protocol Buffers
預設情況下,gRPC 使用 Protocol Buffers,這是 Google 成熟的開源機制,用於序列化結構化資料(雖然它也可以與其他資料格式(例如 JSON)一起使用)。以下是關於它如何運作的簡要介紹。如果您已經熟悉 protocol buffers,請隨意跳到下一節。
使用 protocol buffers 的第一步是在 proto 檔案中定義您要序列化的資料結構:這是一個具有 .proto
副檔名的普通文字檔案。Protocol buffer 資料被結構化為 訊息,其中每個訊息都是一個小的邏輯資訊記錄,其中包含一系列名值對,稱為 欄位。以下是一個簡單的範例
message Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
然後,一旦您指定了資料結構,您就可以使用 protocol buffer 編譯器 protoc
從 proto 定義中以您偏好的語言產生資料存取類別。這些類別為每個欄位提供簡單的存取器,例如 name()
和 set_name()
,以及將整個結構序列化/解析為原始位元組的方法。因此,例如,如果您的選擇的語言是 C++,則在上面的範例上執行編譯器將產生一個名為 Person
的類別。然後,您可以在您的應用程式中使用此類別來填入、序列化和擷取 Person
protocol buffer 訊息。
您在普通的 proto 檔案中定義 gRPC 服務,其中 RPC 方法參數和傳回類型指定為 protocol buffer 訊息
// The greeter service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
gRPC 使用 protoc
和特殊的 gRPC 外掛程式從您的 proto 檔案中產生程式碼:您將獲得產生的 gRPC 用戶端和伺服器程式碼,以及用於填入、序列化和擷取訊息類型的常規 protocol buffer 程式碼。若要了解有關 protocol buffers 的更多資訊,包括如何在您選擇的語言中安裝帶有 gRPC 外掛程式的 protoc
,請參閱protocol buffers 文件。
Protocol buffer 版本
雖然Protocol Buffers 對於開源用戶來說已存在一段時間,但本網站的大多數範例都使用 Protocol Buffers 版本 3 (proto3),它具有稍微簡化的語法、一些有用的新功能,並支援更多語言。Proto3 目前可從Protocol Buffers GitHub 儲存庫取得 Java、C++、Dart、Python、Objective-C、C#、精簡執行環境 (Android Java)、Ruby 和 JavaScript 版本,以及從golang/protobuf 官方套件取得 Go 語言產生器,並且正在開發更多語言版本。您可以在proto3 語言指南和每種語言適用的參考文件中找到更多資訊。參考文件還包含.proto
檔案格式的正式規範。
一般而言,雖然您可以使用 proto2(目前預設的 Protocol Buffers 版本),我們建議您將 proto3 與 gRPC 一起使用,因為它可以讓您使用 gRPC 支援的所有語言,並避免 proto2 用戶端與 proto3 伺服器之間,或反之的相容性問題。