gRPC Golangの使い方を紹介した記事

PHPz
リリース: 2023-04-13 09:54:25
オリジナル
1046 人が閲覧しました

gRPC は、Google によって開発され、オープンソース化された、高性能、多用途のオープンソース RPC フレームワークです。 gRPC は、Golang を含む複数のプログラミング言語をサポートしています。この記事ではgRPC Golangの使い方を紹介します。

1. gRPC のインストール

gRPC Golang を開発する前に、まず gRPC をインストールする必要があります。次のコマンドでインストールできます:

go get -u google.golang.org/grpc
ログイン後にコピー

インストールが完了したら、gRPC の Go 言語コード ジェネレーター protoc-gen-go もインストールする必要があります。これは次のコマンドでインストールできます:

go get -u github.com/golang/protobuf/protoc-gen-go
ログイン後にコピー

2. .proto ファイルの作成

gRPC Golang を開発に使用する前に、まず .proto ファイルを定義する必要があります。 .proto ファイルは、サービス インターフェイスとメッセージ形式を定義します。以下は、.proto ファイルの例です。

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
ログイン後にコピー
  • syntax は、.proto ファイルで使用される構文バージョンを定義します。
  • package は、パッケージ名を定義します。
  • serviceサービスを定義します
  • rpc はリクエスト入力と戻り出力を含むメソッドを定義します
  • ##message メッセージの形式を定義します
  • ##3. Go 言語コードを生成します

.proto 内 ファイルを定義したら、protoc ツールを使用して Go 言語コードを生成する必要があります。次のコマンドで生成できます。

protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
ログイン後にコピー

生成された Go 言語コードは、指定されたディレクトリ helloworld に保存されます。

4. サーバーの実装

Go 言語コードを生成した後、サービスを実装する必要があります。以下は、SayHello メソッドを実装するサービスの例です。

package main

import (
    "context"
    "fmt"
    "net"

    "google.golang.org/grpc"
    pb "github.com/your_username/helloworld"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        fmt.Printf("failed to listen: %v", err)
        return
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    fmt.Printf("server listening at %v", lis.Addr())
    if err := s.Serve(lis); err != nil {
        fmt.Printf("failed to serve: %v", err)
    }
}
ログイン後にコピー

SayHello メソッドを実装するサーバー構造
  • SayHello メソッドは、コンテキスト (ctx) と HelloRequest を受け取ります。オブジェクトを入力として返し、HelloReply オブジェクトとエラーを返します。
  • grpc.NewServer() を通じて gRPC サーバーを作成します。
  • pb.RegisterGreeterServer を使用してサーバーにサービスを登録します。
  • サーバーの起動
  • 5. クライアントの実装
##クライアントを実装することでサービスを呼び出すことができます。以下は、SayHello メソッドの呼び出しを実装するクライアントの例です。

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/grpc"
    pb "github.com/your_username/helloworld"
)

const (
    address     = "localhost:50051"
    defaultName = "world"
)

func main() {
    // Set up a connection to the server.
    conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithTimeout(10*time.Second))
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewGreeterClient(conn)

    // Contact the server and print out its response.
    name := defaultName
    if len(os.Args) > 1 {
        name = os.Args[1]
    }
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()
    r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
}
ログイン後にコピー

grpc.Dial メソッドを使用して接続を作成します

#GreeterClient オブジェクトを作成します c
  • c. SayHello メソッド リクエスト サービスを使用します
  • サービス レスポンスを印刷します
  • 6. プログラムをコンパイルして実行します
  • 次のコマンドを使用して、サーバー プログラムとクライアント プログラムをコンパイルします。 :
go build -o server ./server/main.go
go build -o client ./client/main.go
ログイン後にコピー

サーバー プログラムを実行する:

./server
ログイン後にコピー

クライアント プログラムを実行する:

./client
ログイン後にコピー

7. まとめ

この記事では、gRPC Golang の使用方法を紹介します。これには、gRPC と protoc-gen-go のインストールが含まれ、.proto ファイルの作成、Go 言語コードの生成、サーバーとクライアントの実装、そして最後にプログラムのコンパイルと実行が行われます。 gRPC Golang は、分散システム内のサービス間の通信に使用できる、高性能で汎用性の高い RPC フレームワークを提供します。

以上がgRPC Golangの使い方を紹介した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート