天天看點

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

介紹

gRPC是由google開發,是一款語言中立、平台中立、開源的遠端過程調用(RPC)系統。

通過gRPC,用戶端應用可以像調用本地對象一樣直接調用另一台不同的機器上服務端應用的方法,能夠讓使用者更容易地建立分布式應用和服務。gRPC基本原理為:定義一個服務,指定其能夠被遠端調用的方法(包含參數和傳回類型)。在服務端實作這個接口,并運作一個 gRPC 服務來處理用戶端調用。在用戶端擁有一個存根能夠像服務端一樣的方法。

protocol buffers

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

服務定義

示例

示例來自官方文檔:

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

message HelloRequest {
  required string greeting = 1;
}

message HelloResponse {
  required string reply = 1;
}      

定義方法

  • 單項 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){
}      

繼續閱讀