ホームページ  >  記事  >  バックエンド開発  >  golang grpcをデプロイする方法

golang grpcをデプロイする方法

PHPz
PHPzオリジナル
2023-04-04 17:19:04663ブラウズ

近年、golang 言語はますます多くの開発者に支持されており、その軽量かつ同時実行性の高い機能により、一部の大企業のバックグラウンド サービスで広く使用されています。マイクロサービスやクラウドネイティブ技術の普及により、サーバー分野での golang の利用が増えており、golang の rpc フレームワーク grpc も広く使われるようになりました。

この記事では主に grpc のデプロイメントについて紹介します。デプロイメントの前に、golang と grpc の基本概念を理解する必要があります。

1. golang の基本概念

Golang は、Google から生まれた、静的に型付けされ、コンパイルされ、同時実行されるプログラミング言語です。 golang 言語には、理解する必要がある特別な概念がいくつかあります。

  1. Goroutine: golang の軽量スレッドも、高い同時実行性を実現する主な手段です。
  2. Channel: golang の特別なデータ型で、ゴルーチン間の通信に使用されます。
  3. select: golang でチャネルを多重化するために使用されるキーワード。
  4. defer: golang で関数の実行を遅らせるために使用されるキーワード。
  5. interface: golang で動作を定義する方法。

2. grpc の基本概念

grpc は、Google によって開発およびオープンソース化された、高性能でオープンソースの一般的な RPC フレームワークです。 grpc は、golang、C、Java などを含む複数の言語をサポートします。 grpc の特徴は次のとおりです。

  1. protobuf や json などを含む複数のシリアル化プロトコルをサポートします。
  2. http2 プロトコルに基づいて、双方向ストリーミング、フロー制御、ヘッダー圧縮などの高度な機能をサポートします。
  3. カスタム認証、負荷分散、その他の拡張機能をサポートします。

3. grpc のデプロイメント

基本概念を理解した後、grpc のデプロイメントを紹介しましょう。

  1. grpc サーバー コードの作成

単純な grpc サーバー プログラムを作成するとします。コードは次のとおりです。

package main

import (
    "context"
    "fmt"
    "log"
    "net"

    "google.golang.org/grpc"
    pb "path/to/your/proto"
)

const (
    port = ":50051"
)

type server struct{}

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

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
  1. Write grpc クライアント コード

単純な grpc クライアント プログラムを作成するとします。コードは次のとおりです。

package main

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

    "google.golang.org/grpc"
    pb "path/to/your/proto"
)

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

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewGreeterClient(conn)

    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)
}
  1. コンパイルしてバイナリ ファイルを生成します

コンパイル コマンドは次のとおりです:

$ go build -o greeter_server ./server/main.go
$ go build -o greeter_client ./client/main.go
  1. grpc サーバー プログラムを実行します
$ ./greeter_server

実行後、次の出力が表示されます:

2021/05/07 10:37:30 Listening on :50051
  1. grpc クライアントの実行 ターミナル プログラム
$ ./greeter_client

を実行すると、次の出力が表示されます。

2021/05/07 10:38:28 Greeting: Hello world

このうち、world はデフォルトのパラメータであり、他のパラメータは変更できます。

$ ./greeter_client Tim

実行後、次の出力が表示されます:

2021/05/07 10:39:22 Greeting: Hello Tim

4. 概要

この記事では主に grpc のデプロイメントについて紹介します。これには、grpc サーバー プログラムの作成、grpc クライアント プログラムの作成、バイナリ ファイルのコンパイルと生成が含まれ、grpc サーバー プログラムとクライアント プログラムを実行します。 golang と grpc について詳しく知りたい場合は、公式ドキュメントやその他の関連資料を参照してください。

以上がgolang grpcをデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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