2017-01-25 7 views
0

protobuf를 사용하여 RpcChannel 및 RpcController를 사용하여 서비스를 생성하려고합니다. 나는 구글 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) 

언어 가이드 웹 페이지는 예 (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 기본적으로없는 경우 설치 후 왜 .proto 파일을 컴파일하는 protoc 지원하는 "서비스"태그가 지원됩니다? 그리고 gRPC를 얻지 못하면 어떻게 사용합니까? 감사. –

+0

서비스 태그를 추상 인터페이스 또는 RPC의 추상 사양으로 생각하십시오. 이를 통해 ServiceDescriptor의 정보로 플러그인 (코드 생성기)을 구현할 수 있습니다. – xosp7tom

+0

그리고 역사적인 이유. Google은 오픈 소싱하는 동안 Google이 1) 직렬화 부분 2) RPC 부분을 분리하기로 선택했습니다. rpc 부분은 의도적으로 사용자 자신의 구현을 위해 그 때 남겨둔 반면 직렬화 부분이 먼저 릴리스되었습니다. Google의 rpc 부분 (grpc)은 나중에/최근에 오픈 소스입니다. – xosp7tom