ホームページ  >  記事  >  バックエンド開発  >  GRPC は Go 言語のみをサポートしますか?探索と分析

GRPC は Go 言語のみをサポートしますか?探索と分析

PHPz
PHPzオリジナル
2024-03-28 15:07:02308ブラウズ

GRPC 是否只支持 Go 语言?探究与解析

GRPC は Go 言語のみをサポートしますか?調査と分析

GRPC (gRPC リモート プロシージャ コール) は、もともと Google によって開発され、オープン ソース コミュニティで広く使用されている、高性能のクロスランゲージ リモート プロシージャ コール フレームワークです。 GRPC は、効率的なシリアル化方式と HTTP/2 プロトコルに基づく送信パフォーマンスにより、マイクロサービス アーキテクチャで広く使用されています。ただし、GRPC は Go 言語のみをサポートしていると誤解している人もいますので、ここではこの問題を深く掘り下げ、具体的なコード例を示します。

まず第一に、GRPC は開発者が使用するプログラミング言語を制限しないことを明確にする必要があります。GRPC は、Go、Java、Python、C などを含むがこれらに限定されないさまざまなプログラミング言語をサポートします。 。 GRPC の急速な発展に伴い、コミュニティは拡大を続け、より多くのプログラミング言語のサポートを提供しています。

GRPC を使用する場合は、サービスのインターフェイス定義とメッセージ形式を含む .proto ファイルを定義する必要があります。以下では、Go 言語と Python 言語を例として、単純な GRPC サービスを定義する方法を示します。

最初は Go 言語の例です:

syntax = "proto3";

package helloworld;

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

次に、protoc ツールを使用して Go 言語コードを生成します:

protoc --go_out=plugins=grpc:. helloworld.proto

次に、GRPC サーバーとクライアント コードを記述します:

package main

import (
    "context"
    "log"
    "net"

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

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", ":50051")
    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)
    }
}

次は Python 言語の例です:

syntax = "proto3";

package helloworld;

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

また、プロトコルを通じて Python コードを生成します:

python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto

次に、Python の GRPC サーバーとクライアント コードを作成します:

from concurrent import futures
import grpc
import helloworld_pb2_grpc as pb2_grpc
import helloworld_pb2 as pb2

class Greeter(pb2_grpc.GreeterServicer):

    def SayHello(self, request, context):
        return pb2.HelloReply(message='Hello, %s' % request.name)

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

上記の例からわかるように、GRPC は Go 言語をサポートするだけでなく、他のさまざまなプログラミング言語もサポートします。 .proto ファイルを定義し、対応する言語のプラグインを使用して対応するコードを生成し、各言語で GRPC サーバーとクライアントを実装するだけです。

要約すると、GRPC は Go 言語をサポートするだけでなく、さまざまな言語のアプリケーションに高パフォーマンスの RPC サービスを提供できるクロス言語リモート プロシージャ コール フレームワークです。開発者には、さまざまなプロジェクトで GRPC を使用してみて、その言語間機能をうまく活用して、分散システムとマイクロサービス アーキテクチャをより適切に構築することをお勧めします。

以上がGRPC は Go 言語のみをサポートしますか?探索と分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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