ホームページ  >  記事  >  バックエンド開発  >  gRPC を使用して Golang で基本的なサーバーとクライアントを実装する方法

gRPC を使用して Golang で基本的なサーバーとクライアントを実装する方法

PHPz
PHPzオリジナル
2023-03-31 10:26:141908ブラウズ

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 ファイルで定義されたサービス インターフェイスを実装する必要があります。次の手順でサーバー側のコード実装を完了できます。

  • gRPC サーバーの作成
  • サービスの登録
  • サーバーの実行

コードの実装は次のとおりです。

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)
}
6. テスト

サーバーとクライアント コードを実装したので、サーバーを実行してから、クライアント来てテストしてください。

$ go run greet_server.go
サーバーを実行した後、ターミナルを開いてクライアントを実行してテストします。

$ go run greet_client.go
Greeting: Hello world
7. まとめ

この記事では、gRPC を使用して Golang の基本を実装する方法を紹介します。サーバーとクライアント。 gRPC は、JSON やプロトコル バッファ データなどの複数のトランスポート形式をサポートしながら、強力なエンコードおよびデコード機能を提供するため、さまざまな種類のアプリケーションに適しています。たとえば、分散システム、大規模な Web アプリケーションやゲームなどです。 gRPC について詳しく知りたい場合は、公式ドキュメントを参照してください。

以上がgRPC を使用して Golang で基本的なサーバーとクライアントを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。