天天看點

GRPC(1)- GRPC是什麼?簡介

GRPC是什麼?

  • 簡介
    • 概述
    • 使用協定緩沖區

簡介

本頁面向您介紹 gRPC 和協定緩沖區。gRPC 可以使用協定緩沖區作為其接口定義語言 ( IDL ) 和其底層消息交換格式。如果您不熟悉 gRPC 和/或協定緩沖區,請閱讀本文!

概述

在 gRPC 中,用戶端應用程式可以直接調用不同機器上的伺服器應用程式上的方法,就像它是本地對象一樣,使您可以更輕松地建立分布式應用程式和服務。與許多 RPC 系統一樣,gRPC 基于定義服務的思想,指定可以通過參數和傳回類型遠端調用的方法。在伺服器端,伺服器實作了這個接口并運作一個 gRPC 伺服器來處理用戶端調用。在用戶端,用戶端有一個存根(在某些語言中簡稱為用戶端),它提供與伺服器相同的方法。

GRPC(1)- GRPC是什麼?簡介

gRPC 用戶端和伺服器可以在各種環境中運作和互相通信 - 從 Google 内部的伺服器到您自己的桌面 - 并且可以用任何 gRPC 支援的語言編寫。是以,例如,您可以輕松地使用 Java、Go、Python 或 Ruby 中的用戶端建立一個 gRPC 伺服器。此外,最新的 Google API 将具有其接口的 gRPC 版本,讓您可以輕松地将 Google 功能建構到您的應用程式中。

使用協定緩沖區

預設情況下,gRPC 使用協定緩沖區,谷歌成熟的用于結構化資料序列化的開源機制(雖然它可以與其他資料格式如JSON一起使用)。這是它如何工作的快速介紹。如果您已經熟悉協定緩沖區,請随時跳到下一節。

使用協定緩沖區的第一步是定義要在proto 檔案中序列化的資料的結構:這是一個帶有.proto擴充名的普通文本檔案。協定緩沖區資料被構造為 消息,其中每條消息都是一個小的資訊邏輯記錄,包含一系列稱為字段的名稱-值對。這是一個簡單的例子:

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}
           

然後,一旦指定了資料結構,就可以使用協定緩沖區編譯器protoc從原型定義中生成首選語言的資料通路類。這些為每個字段提供了簡單的通路器,如name()和set_name(),以及将整個結構序列化/解析為原始位元組/從原始位元組序列化/解析整個結構的方法。是以,例如,如果您選擇的語言是 C++,則在上面的示例中運作編譯器将生成一個名為Person. 然後,您可以在應用程式中使用此類來填充、序列化和檢索Person協定緩沖區消息。

您可以在普通的 proto 檔案中定義 gRPC 服務,并将 RPC 方法參數和傳回類型指定為協定緩沖區消息:

// 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 用戶端和伺服器代碼,以及用于填充、序列化和檢索消息類型的正常協定緩沖區代碼。

下節講下PHP如何使用GRPC