google protobuf compiler не генерирует класс для служебного тега?

Я пытаюсь использовать protobuf для создания службы с использованием RpcChannel и RpcController. Я сослался на руководство по языку 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. Любые намеки или ссылки?

Спасибо!

2

Решение

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]