gRPC (Google リモート プロシージャ コール) は、プロトコル バッファ (ProtoBuf) を通じてサービス インターフェイスを定義し、多くのプログラミング言語をサポートする、高性能のクロス言語リモート プロシージャ コール フレームワークです。 gRPC は分散システムの開発で広く使用されており、その効率的なシリアル化および逆シリアル化メカニズム、HTTP/2 ベースのフロー制御、チャンク送信などの機能により、ネットワーク送信において明らかな利点が得られます。
この記事では主に、Golang に gRPC をインストールする方法を紹介し、簡単なクライアントとサーバーのサンプル コードを作成します。
gRPC をインストールする前に、Protocol Buffers 3 をインストールする必要があります。プロトコル バッファーは、gRPC がコードを自動生成するために必要なツールであり、データをシリアル化するためのツールでもあります。
まず、Mac OS を例として、Protocol Buffers 3 のインストール パッケージをダウンロードします:
$ curl -OL https://github.com/google/protobuf/releases/download/v3.9.1/protobuf-all-3.9.1.zip $ unzip protobuf-all-3.9.1.zip $ cd protobuf-3.9.1
configure、make、make install を実行して Protocol Buffers をインストールします:
$ ./configure $ make $ sudo make install
インストール プロトコル バッファーの完了後、次のコマンドを使用して Go の gRPC と関連ツールをインストールします:
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go
ProtoBuf ファイルは、サービス インターフェイスとデータ構造を定義するために使用されます。 、gRPC ツールを介して自動的に対応するコード (クライアント コードとサーバー コードを含む) を生成します。
ここでは、加算操作をサポートする電卓サービス インターフェイスを定義する簡単な例を作成します。
syntax = "proto3"; package calculator; service Calculator { rpc Add(AddRequest) returns (AddResponse) {} } message AddRequest { int32 left = 1; int32 right = 2; } message AddResponse { int32 sum = 1; }
この例では、AddRequest パラメーターを受け取る Add メソッドを含む、Calculator という名前のサービス インターフェイスを定義します。そしてAddResponseパラメータを返します。
AddRequest と AddResponse はどちらもメッセージ構造で、それぞれに 2 つのオペランドと加算の結果を表す int32 型の 2 つのフィールドが含まれています。
ProtoBuf ファイルを作成した後、次のコマンドを使用してクライアント コードとサーバー コードを生成します:
$ protoc --go_out=plugins=grpc:. calculator.proto
このコマンドは、calculator.pb という名前のファイルを生成します。 Go 用の Go ファイル。電卓サービスのクライアント コードとサーバー コードを定義します。
クライアントとサーバーのコードを生成した後、実際のクライアントとサーバーの作成を開始できます。
最初はサーバー コードです。電卓インターフェイスを実装するために、server.go という名前のファイルを作成します:
package main import ( "context" "log" "net" pb "calculator/calculator" "google.golang.org/grpc" ) type server struct{} func (s *server) Add(ctx context.Context, in *pb.AddRequest) (*pb.AddResponse, error) { sum := in.Left + in.Right return &pb.AddResponse{Sum: sum}, nil } const ( port = ":50051" ) func main() { lis, err := net.Listen("tcp", port) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterCalculatorServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
この例では、server という名前の構造体を定義し、電卓インターフェイス。 Add メソッドは、AddRequest パラメータを受け取り、2 つのオペランドの合計を計算し、AddResponse パラメータを返します。
最後に、gRPC フレームワークが提供する RegisterCalculatorServer メソッドを使用してサービスを gRPC サーバーに登録し、gRPC サーバーを起動します。
次にクライアント コードを記述するために、client.go という名前のファイルを作成し、電卓サービスによる簡単な加算の例を実装します。
package main import ( "context" "log" "os" "strconv" pb "calculator/calculator" "google.golang.org/grpc" ) const ( address = "localhost:50051" defaultName = "world" ) func main() { // Set up a connection to the server. conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() c := pb.NewCalculatorClient(conn) // Contact the server and print out its response. left, err := strconv.Atoi(os.Args[1]) if err != nil { log.Fatalf("could not parse left operand: %v", err) } right, err := strconv.Atoi(os.Args[2]) if err != nil { log.Fatalf("could not parse right operand: %v", err) } r, err := c.Add(context.Background(), &pb.AddRequest{Left: int32(left), Right: int32(right)}) if err != nil { log.Fatalf("could not add: %v", err) } log.Printf("Sum: %d", r.Sum) }
この例では、という名前のクライアント オブジェクトを作成します。クライアントに接続し、grpc.Dial メソッドを通じてサーバーに接続します。次に、コマンド ライン パラメーターから加算の 2 つのオペランドを解析し、Add メソッドを呼び出してリクエストを送信し、サーバーから返された結果を取得して出力します。
両方のファイルを作成した後、次のコマンドを使用して 2 つのプログラムをコンパイルし、実行します:
$ go build server.go $ go build client.go $ ./server
次に、別の端末で次のコマンドを実行します。クライアントプログラムを実行するコマンド:
$ ./client 1 2
実行結果は計算結果3を出力します。
上記は Golang での gRPC のインストールと使用方法であり、gRPC を介して効率的な分散システムを作成することが非常に簡単になります。
以上がgrpc golangのインストールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。