grpc入門(一)

3352 ワード

grpc入門(一)
一.grpcとは
grpcはグーグルオープンソースの高性能rpcフレームワークです(https://grpc.io)、protocol buffersをIDL(Interface Definition Language)ファイルとして使用してもよいし、下位層の情報伝送のフォーマットとして使用してもよい(これも本博文で紹介した方法である).
以下の内容は筆者がwhat is grpcに対して?の翻訳を参照してください.https://grpc.io/docs/guides/index.html.
grpcのクライアントアプリケーションは、ローカルメソッドにアクセスするように他のマシン上のサービス側アプリケーションを呼び出すことができ、分散アプリケーションとサービスを非常に簡単に作成することができます.他の多くのrpcフレームワークと同様に、gprcもサービスインタフェースを作成し、リモートメソッドを呼び出すために必要なパラメータと戻りタイプを指定します.サービス側では、サービスを実装するインタフェースが必要であり、クライアントの呼び出しを処理するためにサーバを起動する.クライアントでは、杭コードが必要であり、サービス側と同じ方法を提供します.
grpcのクライアントとサービス側は、Google内部のサービスからデスクトップアプリケーションまで、gprcがサポートする異なる言語を使用して実現できる異なる環境で相互に呼び出すことができます.したがって、grpcを使用してjavaのサービス側アプリケーションを簡単に作成し、goまたはpythonまたはruby言語を使用してクライアントアプリケーションを作成することができます.一方、グーグルが最近発表したいくつかのインタフェースはgrpcを使用しており、グーグルのいくつかの機能をアプリケーションに統合することができます.
grpcのデフォルトではprotocol buffersが採用されています.これはgoogleがオープンソースであり、データ構造のシーケンス化に非常に成熟したフレームワークです(jsonなどの他のデータフォーマットも使用できます).ここで彼の使い方をすばやく紹介します.protocol buffersに詳しい場合は、この文章をスキップして次の章に直接入ることができます.
まず、protocol buffersを使用してデータをシーケンス化する場合は、protoファイルを作成する必要があります.ファイルには、シーケンス化したい構造データを定義し、ファイル名に注意してください.protoエンディング.protocol buffersのデータは構造化されたメッセージであり、各メッセージは小さな論理情報の記録であり、メッセージには一連のキー値ペアが含まれており、属性と呼ばれています.以下に簡単な例があります.
message Person {
   string name = 1;
   int32 age = 2;
   bool has_ponycopter = 3;        
}

次に、データ構造を作成したら、protocol buffersコンパイルコマンドprotocを使用して、得意な言語に対応するクラスを生成することができます.クラスでは、name()やset_などの各プロパティを操作する簡単な方法が用意されています.name()は,またこれらのメソッド内部でデータをメタデータにシーケンス化して相手に転送してもよいし,相手から送信されたメタデータを解析してもよい.具体的な例では、c++を使用している場合、上記の例をコンパイルするとPersonというクラスが生成され、このクラスを使用して構築、シーケンス化し、Personに対応するprotocol buffersメッセージを得ることができます.
以下に、grpcのサービスを一般的なprotoファイルで定義できます.rpcのメソッドのパラメータと戻りタイプはprotocol buffersのメッセージとして宣言する必要があります.
// The greeter service definition.
service Greeter {
   //Sends a greeting
   rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
   string name = 1;
}

//The response message containing the greetings
message HelloReply {
   string message = 1;
}

grpcは、プラグイン付きprotocコマンドを使用して、作成したprotoファイルにコードを生成できます.しかし、grpcのプラグインを使用すると、grpcのクライアントとサービス側のコードを生成することができ、一般的なprotocol buffersコードと同様に、構築、シーケンス化、メッセージを取得することができます.
Protocol Buffers documentドキュメントからprotocol buffersに関する詳細な説明を入手するか、得意なプログラミング言語のprotocプラグインの入手とインストール方法を学ぶことができます.
二.grpcの4つの定義方法
grpcは、ユーザが4つの形式のrpcメソッドを定義することを可能にする(原文参照:https://grpc.io/docs/guides/concepts.html):
A.クライアントは、通常の方法定義のように、サービス側に要求を送信し、サービス側は次のように応答する.
rpc SayHello(HelloRequest) returns (HelloResponse) {}

B.サービス側のフロー式rpc:クライアントはサービス側に要求を送信し、次に示すように、サービス側を読み取るためのフローのメッセージを得る.
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse) {} 

C.クライアントフロー式rpc:クライアントはフローを使用してサービス側に情報を送信し、クライアントがすべての情報をサーバーに送信した後、サービス側の応答を待ち始める.以下のように:
rpc LotsOfGreeting(stream HelloRequest) returns HttpResponse {}

D.双方向ストリーム式rpc:サービス側とクライアントはいずれも読み書きストリームでデータを相手に送信する.この2つのフローは互いに独立しているので、読み書きは任意の順序で行うことができます.たとえば、サービス側は、お客様のすべての情報を受信する前に応答を開始したり、データを読み出してからデータを書いたり、以下のように他の任意の組み合わせで行うことができます.
rpc BidiHello(stream HelloRequest) returns HelloResponse {}

  
転載先:https://www.cnblogs.com/miller-zou/p/8214101.html