2017-01-25 51 views
0

我想使用protobuf生成使用RpcChannel和RpcController服務。我提到谷歌的protobuf的語言引導和:谷歌protobuf編譯器不會生成服務標籤的類?

我有樣品原型文件是這樣的:

語法=「proto2」;

protoc --cpp_out=./ examples.proto 

我的.h和.cc文件:

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) 

語言指南網頁提供了一個示例(https://developers.google.com/protocol-buffers/docs/proto#services)的需要使用「SearchService」類:但在生成的代碼中,沒有搜索服務。該指南沒有提供RpcChannel/RpcController用法的完整示例。

那麼我該如何修復這個例子才能使它工作?我搜索谷歌,但沒有找到任何好的cpp示例,給出了RpcChannel/RpcController如何工作的完整示例。任何提示或鏈接?

謝謝!

回答

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

和歷史原因。雖然谷歌是開源的,谷歌選擇分裂1)序列化部分2)rpc部分。序列化部分是首先發布的,而rpc部分是故意留給用戶自己實現的。谷歌的rpc部分(grpc)稍後/最近開源。 – xosp7tom