首頁 > 軟體

Golang語言實現gRPC的具體使用

2022-08-02 18:06:33

gRPC 是通訊協定基於 HTTP/2,支援多語言的 RPC 框架,使用 Protobuf 作為它的介面設計語言(IDL),可以通過 protoc 工具生成 Golang 語言的結構體。

RPCRemote Procedure Call 的縮寫,譯為遠端過程呼叫(也可譯為遠端方法呼叫或遠端呼叫),它是計算機通訊協定。該協定可以實現呼叫遠端服務就像呼叫本地服務一樣簡單,無需關心跨網路,跨平臺,跨語言等問題。

gRPC 訊息序列化方式通常使用 Protobuf,它是二進位制格式,體積小,網路傳輸快,佔用頻寬流量少,呼叫效能更高。

gRPC 的特點

  • IDL

    gRPC 使用 ProtoBuf 來定義服務,ProtoBuf 是由 Google 開發的一種資料序列化協定(類似於 XMLJSON)。ProtoBuf 能夠將資料進行序列化,並廣泛應用在資料儲存、通訊協定等方面。

  • 多語言支援

    gRPC 支援多種語言,並能夠基於語言自動生成使用者端和伺服器端功能庫。目前已提供了 C 版本 grpcJava 版本 grpc-javaGo 版本 grpc-go,其中,grpc 支援 CC++Node.jsPythonRubyObjective-CPHPC# 等語言,grpc-java 已經支援 Android 開發。

  • HTTP2

    gRPC基於HTTP2標準設計,帶來了更多強大功能,如雙向流、頭部壓縮、多複用請求等。這些功能帶來重大益處,如節省頻寬、降低TCP連結次數、節省CPU使用和延長電池壽命等。同時,gRPC還能夠提高了雲端服務和Web應用的效能。gRPC既能夠在使用者端應用,也能夠在伺服器端應用,從而以透明的方式實現使用者端和伺服器端的通訊和簡化通訊系統的構建。

使用 gRPC 定義伺服器端

gRPC 預設使用 Protobuf 作為介面設計語言,在 .proto 檔案中使用 service 關鍵字定義服務,使用 rpc 和 returns 關鍵字定義指定請求引數和返回結果的方法。

gRPC 提供了 Protobuf 編譯器外掛 protoc-gen-grpc,用於編譯 .proto 檔案,生成伺服器端和使用者端程式碼,我們只需在伺服器端編寫實現 Api 的程式碼,然後在使用者端呼叫 Api。

syntax = "proto3";

import "google/protobuf/any.proto";

package hello;

option go_package = "proto/gen/go";

message HelloReq {
  string name = 1;
}

message HelloResp {
  int32 code = 1;
  string greet = 2;
  google.protobuf.Any details = 3;
}

service HelloService {
  rpc Greet(HelloReq) returns (HelloResp);
}

使用 gRPC 的使用者端

通過 protoc 命令編譯 .proto 檔案,自動生成伺服器端和使用者端程式碼。

在伺服器端,手動編寫生成的伺服器端方法的業務邏輯程式碼,然後執行 gRPC 服務,接收並處理使用者端請求,gRPC 服務自動解碼請求引數,然後執行服務的方法,並將返回結果自動進行編碼。

在使用者端,實現和服務相同的方法,然後使用者端可以本地呼叫這些方法,將請求引數封裝在 Protobuf 的訊息型別中,gRPC 將請求傳送給伺服器,並返回伺服器的 Protobuf 序列化方式的響應訊息。

參考文章:

Golang 語言 gRPC 到底是什麼?

gRPC簡介

到此這篇關於Golang語言實現gRPC的具體使用的文章就介紹到這了,更多相關Golang gRPC內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com