gRPC は、Google のオープンソースの高性能 RPC (リモート プロシージャ コール) フレームワークで、Golang を含む複数の言語をサポートしています。 Golang では、gRPC コードは非常に簡単に作成して使用できますが、実際にデプロイするといくつかの課題に遭遇する可能性があります。
この記事では、Golang で gRPC を使用し、サーバーにデプロイする方法を紹介します。
Golang では、gRPC と関連する protobuf ライブラリをインストールする必要があります。次のコマンドを使用して、gRPC および protobuf ライブラリをインストールできます。
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
gRPC では、必要なものを記述するプロト ファイルを定義する必要があります。サービス。たとえば、メッセージを受け入れてクライアントに返す Echo サービスを定義するとします。
以下は、単純な Echo サービスの proto ファイルの例です:
syntax = "proto3"; option go_package = "echo"; service EchoService { rpc Echo (EchoMessage) returns (EchoMessage); } message EchoMessage { string message = 1; }
この例では、メッセージ文字を含む EchoMessage メッセージ タイプを持つ Echo サービスを定義します。 String、および EchoMessage を受け入れ、そのメッセージを応答として返す Echo メソッド。
proto ファイルを定義したら、protobuf コンパイラを使用して、対応する Golang コードを生成できます。 Golang コードを生成するには、次のコマンドを実行する必要があります。
$ protoc --go_out=. echo.proto
これにより、Echo サービスのコードを含む echo.pb.go というファイルが生成されます。
次に、Echo サービスを実装する必要があります。 Echo サービスでは、EchoMessage メッセージを受信してクライアントにメッセージを返すために、Echo メソッドを実装する必要があります。
以下は簡単な Echo サービス実装例です:
type server struct{} func (s *server) Echo(ctx context.Context, message *EchoMessage) (*EchoMessage, error) { return &EchoMessage{ Message: message.Message, }, nil } func main() { s := grpc.NewServer() RegisterEchoServiceServer(s, &server{}) lis, err := net.Listen("tcp", ":50051") if err != nil { log.Fatalf("failed to listen: %v", err) } if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
この例では、Echo メソッドを含むサーバー タイプを実装します。クライアントが Echo メソッドを呼び出すと、受信したメッセージが返されます。
また、main 関数で gRPC サーバーを作成し、実装を登録関数 RegisterEchoServiceServer に渡します。次に、ポート 50051 でのリッスンを開始し、サーバーを起動します。
gRPC サービスの実装が完了したら、それをコンパイルしてサーバーにデプロイする必要があります。次のコマンドを使用してコードをコンパイルできます。
$ go build .
これにより、サーバーにデプロイできる実行可能ファイルが作成されます。サーバー上で次のコマンドを実行して gRPC サービスを開始できます:
$ ./your-program
この例では、プログラムの名前は「your-program」です。プログラムを実行する前に、サーバーがポート 50051 にアクセスできることを確認する必要があることに注意してください。
デプロイメントの完了後、gRPC クライアントを使用してコードをテストできます。次のコマンドを使用して gRPC クライアントをインストールできます。
$ go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
gRPC クライアントを使用するには、接続を作成し、その接続を使用して Echo サービスを呼び出す必要があります。
これは簡単な gRPC クライアントの例です:
func main() { conn, err := grpc.Dial(":50051", grpc.WithInsecure()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() c := NewEchoServiceClient(conn) message := &EchoMessage{Message: "hello world"} res, err := c.Echo(context.Background(), message) if err != nil { log.Fatalf("echo failed: %v", err) } log.Printf("echo response: %s", res.Message) }
この例では、接続を作成し、その接続を使用して Echo サービスを呼び出します。 EchoMessage メッセージを渡し、サーバーの応答を出力することでコードが適切に動作しているかどうかをテストしました。
gRPC は効率的な RPC フレームワークであり、Golang で使用するのは非常に簡単ですが、実際の展開プロセスではいくつかの課題に遭遇する可能性があります。この記事では、gRPC と関連する protobuf ライブラリのインストール方法、proto ファイルの定義方法、Golang コードの生成方法について説明します。また、Echo サービスを実装する方法と、それをサーバーにデプロイする方法も示しました。最後に、gRPC クライアントを使用してコードをテストする方法も示しました。
以上がgrpc golangのデプロイメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。