2017-01-25 25 views
0

Я пытаюсь использовать protobuf для создания службы с помощью RpcChannel и RpcController. Я говорил на языке руководство по Google Protobuf и:Компилятор google protobuf не генерирует класс для тега службы?

У меня есть образец файла прото так:

синтаксис = «proto2»;

message SearchRequest 
{ 
    required string Request = 1; 
} 

message SearchResponse 
{ 
    required string Response = 2; 
} 

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

Тогда я скомпилировал с:

protoc --cpp_out=./ examples.proto 

Я получил .h и .cc файлы. Но когда я ищу сгенерированный код, я нашел только классы для «Запрос» и «Ответ», но не класс для «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.

Так как я могу исправить пример, чтобы заставить его работать? Я искал google, но не нашел хорошего примера 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

Спасибо, если КПГР по умолчанию не установлен, то почему protoc поддержка компиляции файла .proto, который «сервис» тег поддерживается? И как он используется, если я не получаю gRPC? Благодарю. –

+0

Подумайте, как тег абстрактного интерфейса или абстрактную спецификацию RPC. С его помощью вы можете реализовать свой плагин - по существу, генератор кода - с информацией из ServiceDescriptor. – xosp7tom

+0

И историческая причина. Хотя google - это open-sourcing, google решил разделить 1) часть сериализации 2) часть rpc. сначала была выпущена часть сериализации, а часть rpc намеренно оставлена ​​для собственной реализации пользователя в то время. часть rpc google (grpc) позже/недавно открыта. – xosp7tom