gRPC は、言語やプラットフォームを超えた RPC 呼び出しに適した、高性能、オープンソースのユニバーサル リモート プロシージャ コール フレームワークです。データ転送にはGoogleが開発したprotobufプロトコルを採用しており、サーバーとクライアント間の通信を高速に実現でき、豊富な機能と拡張性を備えています。この記事では、gRPC を使用して Golang で基本的なサーバーとクライアントを実装する方法を紹介します。
1. gRPC のインストール
始める前に、まず gRPC と protobuf をインストールする必要があります。次のコマンドを使用できます:
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go
2. protobuf ファイルの作成
次に、転送するデータと呼び出すメソッドを定義する .proto ファイルを作成する必要があります。この例では、greet.proto というファイルを作成しました。
syntax = "proto3"; package greet; service GreetService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; }
3. コードの生成
protobuf ファイルを通じて gRPC 関連のコードを生成します。次のコマンドを実行します。
$ protoc -I greet/ greet/greet.proto --go_out=plugins=grpc:greet
生成されたコードは、greet ディレクトリに保存されます。
4. サーバー側の実装
サーバー側の実装では、proto ファイルで定義されたサービス インターフェイスを実装する必要があります。次の手順でサーバー側のコード実装を完了できます。
コードの実装は次のとおりです。
package main import ( "context" "log" "net" "google.golang.org/grpc" pb "path/to/greet" ) type server struct {} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { return &pb.HelloResponse{Message: "Hello " + in.Name}, nil } func main() { lis, err := net.Listen("tcp", ":50051") if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterGreetServiceServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
5. クライアントの実装
#クライアントの実装は比較的単純です。対応するサーバーに接続してクライアントをインスタンス化するだけで、サーバーが提供するメソッドを呼び出すことができます。クライアント コードの実装では、まず gRPC 通信用の接続を作成し、次にその接続を使用してクライアントを作成し、インターフェイス メソッドを呼び出す必要があります。 次はクライアント コードの実装です:package main import ( "log" "os" "context" "google.golang.org/grpc" pb "path/to/greet" ) func main() { address := "localhost:50051" if len(os.Args) > 1 { address = os.Args[1] } conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("couldn't connect: %v", err) } defer conn.Close() c := pb.NewGreetServiceClient(conn) name := "world" if len(os.Args) > 2 { name = os.Args[2] } r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("error: %v", err) } log.Printf("Greeting: %s", r.Message) }
$ go run greet_server.go
$ go run greet_client.go Greeting: Hello world
以上がgRPC を使用して Golang で基本的なサーバーとクライアントを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。