011 Rust 網路程式設計,gRPC 介紹

linghuyichong發表於2020-05-10

gRPC是由google開發,是一款語言中立、平臺中立、開源的遠端過程呼叫(RPC)系統。
透過gRPC,客戶端應用可以像呼叫本地物件一樣直接呼叫另一臺不同的機器上服務端應用的方法,能夠讓使用者更容易地建立分散式應用和服務。gRPC基本原理為:定義一個服務,指定其能夠被遠端呼叫的方法(包含引數和返回型別)。在服務端實現這個介面,並執行一個 gRPC 服務來處理客戶端呼叫。在客戶端擁有一個存根能夠像服務端一樣的方法。

gRPC預設使用protocol buffers,它是Google開源的一套成熟的結構資料序列化機制。

示例

示例來自官方文件:

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  required string greeting = 1;
}

message HelloResponse {
  required string reply = 1;
}

在上述例子中,定義一個服務,指定其可以被遠端呼叫的方法及其引數和返回型別。在定義的訊息型別中,定義了欄位,後面的數字表示欄位對應的唯一的數字標識,這些標識用來在訊息的二進位制格式中識別的欄位,並且一旦訊息投入使用,這些標識就不應該再被修改。

定義方法

gRPC允許定義四類服務方法:

  • 單項 RPC,即客戶端傳送一個請求給服務端,從服務端獲取一個應答,就像一次普通的函式呼叫。
    rpc SayHello(HelloRequest) returns (HelloResponse){
    }
  • 服務端流式 RPC,即客戶端傳送一個請求給服務端,可獲取一個資料流用來讀取一系列訊息。客戶端從返回的資料流裡一直讀取直到沒有更多訊息為止。
    rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){
    }
  • 客戶端流式 RPC,即客戶端用提供的一個資料流寫入併傳送一系列訊息給服務端。一旦客戶端完成訊息寫入,就等待服務端讀取這些訊息並返回應答。
    rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {
    }
  • 雙向流式 RPC,即兩邊都可以分別透過一個讀寫資料流來傳送一系列訊息。這兩個資料流操作是相互獨立的,所以客戶端和服務端能按其希望的任意順序讀寫,例如:服務端可以在寫應答前等待所有的客戶端訊息,或者它可以先讀一個訊息再寫一個訊息,或者是讀寫相結合的其他方式。每個資料流裡訊息的順序會被保持。
    rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章