2017-01-25 2 views
0

私はprotobufを使ってRpcChannelとRpcControllerを使ってサービスを生成しようとしています。私はGoogleのいるProtobufの言語ガイドを参照して:Googleのprotobufコンパイラはサービスタグのクラスを生成しませんか?

は、私はこのようなサンプルプロトファイルを持っている:

構文=「proto2を」。私は.Hとの.ccファイルを持っ

protoc --cpp_out=./ examples.proto 

message SearchRequest 
{ 
    required string Request = 1; 
} 

message SearchResponse 
{ 
    required string Response = 2; 
} 

service SearchService { 
    rpc Search (SearchRequest) returns (SearchResponse); 
} 

その後、私はそれをコンパイル。しかし、私は、生成されたコードを検索するとき、私は「要求」と「応答」が、「SearchService」のためではないクラスのためのクラスが見つかりました:

examples.pb.h:class SearchRequest; 
examples.pb.h:class SearchResponse; 
examples.pb.h:class SearchRequest : public ::google::protobuf::Message { 
examples.pb.h: // @@protoc_insertion_point(class_scope:SearchRequest) 
examples.pb.h:class SearchResponse : public ::google::protobuf::Message { 
examples.pb.h: // @@protoc_insertion_point(class_scope:SearchResponse) 

言語ガイドのWebページは、例(https://developers.google.com/protocol-buffers/docs/proto#services)を提供しました"SearchService"のクラスを使用する必要がありますが、生成されたコードには検索サービスはありません。このガイドでは、RpcChannel/RpcControllerの使用方法の完全なサンプルを提供していませんでした。

私はどのように動作させるために例を修正できますか?私はGoogleを検索しましたが、RpcChannel/RpcControllerがどのように動作するかを示す完全なサンプルを提供する良いcppの例は見つかりませんでした。ヒントやリンクは?

ありがとうございます!

答えて

1

protobufはRPC実装自体を提供していません。プラグインインターフェースを使って自分で作成するか、grpcを使うべきです。

たとえば、grpcはgrpc_cpp_pluginプラグインを使用します。

$ protoc -I ../../protos --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ../../protos/route_guide.proto 

https://github.com/grpc/grpc/blob/master/examples/cpp/cpptutorial.md

+0

gRPCがインストールされ、デフォルトではない場合おかげで、なぜprotocサポートは、「サービス」のタグがサポートされている.protoファイルをコンパイルするには?私がgRPCを手に入れないと、どうやって使用されますか?ありがとう。 –

+0

RPCの抽象的なインターフェイスまたは抽象的な仕様としてサービスタグを想定します。これにより、ServiceDescriptorからの情報で、プラグイン(コードジェネレータ)を実装することができます。 – xosp7tom

+0

歴史的な理由。 Googleはオープンソーシングですが、Googleは分割することを選択しました。1)シリアル化パート2)RPCパート。 rpcの部分は意図的にユーザ自身の実装のために放置されていましたが、最初に直列化部分がリリースされました。 Googleのrpcの部分(grpc)は、後で/最近オープンソースです。 – xosp7tom

関連する問題