문제

gSoap을 사용하여 레거시 C++ 시스템을 SOA로 리팩토링하고 있습니다.성능 문제(매우 큰 XML)가 있어서 리드가 프로토콜 버퍼를 살펴보라고 요청했습니다.그랬더니 정말 멋져 보입니다(C++ 및 Java 지원이 필요합니다).그러나 프로토콜 버퍼는 직렬화만을 위한 솔루션이므로 이제 이를 Java 프런트 엔드로 보내야 합니다.HTTP(내부 네트워크만)를 통해 직렬화된 항목을 보내려면 C++ 및 Java 관점에서 무엇을 사용해야 합니까?

추신.다른 사람은 gSoap 솔루션의 속도를 높이려고 합니다. 저는 프로토콜 버퍼에만 관심이 있습니다.

도움이 되었습니까?

해결책

HTTP 요청이나 HTTP 응답을 통해 바이너리 페이로드도 보낼 수 있습니다.프로토콜 버퍼의 바이트를 요청/응답에 직접 쓰고 콘텐츠 유형을 "application/octet-stream"으로 설정하세요.클라이언트와 서버는 나머지 작업을 쉽게 처리할 수 있어야 합니다.어느 쪽이든 그것보다 더 특별한 것이 필요하다고 생각하지 않습니다.

다른 팁

Protobuf는 이진 프로토콜입니다. 비누와 잘 섞이지 않습니다. 나는 당신이 GSOAP를 고수하거나 프로토 부프로 완전히 전환하는 것이 좋습니다.

Protobuf를 사용하면 프로토콜을 이와 같은 특수 형식으로 정의하고

message Product {
  required string id = 1;
  required string description = 2;
  required int32 quantity = 3;
  optional bool discontinued = 4;
}

그만큼 protoc 도구는 C ++/Java/Python에서 코드를 생성 할 수 있으므로 한쪽 끝에서 직렬화하고 다른 쪽에서는 코드를 직렬화 할 수 있습니다.

보시다시피, Protobuf는 개별 객체를 직렬화하도록 설계되었습니다. 헤더와 같은 비누가 제공하는 모든 시설을 제공하지는 않습니다. 이 문제를 해결하기 위해 Protobuf 내부에서 Protobuf를 사용합니다. 우리는 이와 같은 봉투를 정의합니다.

message Envelope {
  enum Type { 
    SEARCH = 1;
    SEARCH_RESPONSE = 2;
    RETRIEVE = 3;
    RETRIEVE_RESPONSE = 4; 
  }
  required Type type = 1;

  required bytes encodedMessage = 2;

  message Header {
    required string key = 1;
    required bytes value = 2;
  }    
  repeated Header headers = 3;
}

그만큼 encodedMessage 또 다른 직렬화 된 프로토 부프 메시지입니다. 비누 헤더의 모든 것들이 이제갑니다 headers.

Google Frontends가 선호합니다 application/protobuf.

그만큼 Protocolbuffermodel Google API 클라이언트 사용 중 application/x-protobuf.

문자열로/로부터 인코딩 된 데이터를 직렬화/디바일 화 할 수 있습니다. 직렬화 된 문자열을 HTTP 게시물의 본문으로 Java로 보내고 해제됩니다. 그것은 하나의 접근법입니다. 또 다른 방법은 protobuf 서비스 인터페이스를 사용하는 것입니다. Protobuf를 사용하면 .proto 파일에서 서비스 인터페이스를 정의 할 수 있으며 프로토콜 버퍼 컴파일러는 선택한 언어로 서비스 인터페이스 코드 및 스터브를 생성합니다. 완전한 RPC 프레임 워크를 얻으려면 protobuf :: rpcchannel 및 protobuf :: rpccontroller 클래스 만 구현하면됩니다. 아마도이 클래스에 대한 HTTP 래퍼를 쓸 수 있습니다. 자세한 내용은 다음 링크를 참조하십시오.

http://code.google.com/apis/protocolbuffers/docs/proto.html#services http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html#service http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.service.html

내 지식 프로토콜 버퍼 지원은 C ++ 및 Java 모두에서 사용할 수 있으므로 두 시스템간에 프로토콜 버퍼 직렬화 데이터를 교환 할 수 있어야합니다.

즉, 당신의 실제 질문은 "C ++ 백엔드와 Java 클라이언트 사이에서 HTTP를 통해 물건을 어떻게 보내는가"입니다.

GSOAP를 사용하는 방법을 배워야하는 것처럼 들립니다. 문서.

또는 C ++ 앱에서 편안한 웹 서버를 호스팅 할 수 있습니다. https://stackoverflow.com/questions/298113/how-can-i-implement-a-restful-webservice-using-c++

다음으로 새 C ++ RESTFULL 서버에서 호스팅 된 데이터에 액세스해야합니다. Java의 고객을위한 휴식?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top