2012-06-27 2 views
1

저는 우리가 사용하는 몇 가지 protobuf 기반 서비스에 대해 트래픽에 대해 디버깅을하고 싶습니다.protobuf 안에 컴파일 된 protobuf 메시지 정의를 보낼 수 있습니까?

서비스는 모두 메시지 용으로 컴파일 된 .proto 파일을 사용하며 클라이언트의 구현을 알 필요가 없도록 실제 형식의 .proto 파일 텍스트를 직렬화하여 클라이언트로 보내고 싶습니다. 컴파일시의 세부 사항.

C++에서 가능합니까? 나는 get the structure of a message without the definition 일 수 있지만 메시지 필드의 이름을 가지고 있으면 디버깅에 중요합니다. .proto 파일이 없어도이 정보를 얻을 수있는 또 다른 방법이 있습니까?

감사합니다.

답변

2

원래 보낸 사람이 .proto 파일이있는 경우, 그들은이 protobuf 데이터 파일에 "protoc", 일치 (protobuf의 배포에 사용할 수 있어야합니다) "descriptor.proto"로 컴파일 할 수 있습니다.

생성 된 이진 데이터

bytes 필드로 포함하고, 또한 클라이언트로 serparately 한 직렬화 할 수 있습니다 - 당신은
protoc --descriptor_set_out={out_path} --proto_path={in_path} 

를 사용하여이 작업을 수행 할 수 있습니다 (안된 원하는 경우 또는, IIRC를 표준 출력하기) descriptor.proto에서 생성 된 객체 모델을가집니다.

일단 역 직렬화하면 수행 할 작업은 다음과 같습니다. FileDescriptorSet은 최상위 개체입니다. 당신은 FieldDescriptorProto, 회원 이름 등을 가지고 넘어갈 수 있어야합니다.

아마도 그다지 우아하지는 않지만 작동해야합니다.

또는 메타 데이터를 임의로 포함하고 모든 것을 확장 필드로 처리하십시오.