2011-11-08 2 views
15

현재 기존 바이너리 프로토콜을 유지하면서 현재 C++ 네트워크 수작업 직렬화 메커니즘을 개선하는 방법을 조사했습니다. 첫 번째 방법은 이진 직렬화를 사용하여 Boost.Serialization을 사용하여 Boost.Asio를 사용하여 코드를 작성하는 것이 었습니다. 어쨌든 그것은 현재의 수작업 구현보다 다소 느린 (10 %) 것으로 나타났습니다. 누구든지 Boost.Asio와 함께 Google Protobuf 사용에 대한 실제 _real_work_ 경험이 있습니까? Google 프로토콜 버퍼를 사용하는 Boost.Asio

나는 샘플 구글 검색 만 올-을이 예제와 함께 할 수 있었다 :

Boost Asio with google protocol buffers sample

합니까 누구 실제 프로젝트에 이런 짓을? 이것이 매우 빠르므로 매우 흥미로운 성과 수치를 가지고 있습니다 ...

+0

당신이 그림을 보여주는 이미지를 첨부 할 수 있습니까? –

+0

죄송합니다. 공개 할 수 없습니다. ( – jvaz

답변

22

복잡하고 낮은 메시지 속도의 프로토콜에 boost :: asio와 Protobuf를 사용합니다. 간단하고 높은 메시지 속도 프로토콜의 경우 boost :: asio 및 사용자 지정 serialization을 수행합니다.

C++ Protobuf 라이브러리는 std :: string을 사용하여 역 직렬화되는 메시지의 문자열 필드를 나타냅니다. 즉,받은 모든 메시지의 모든 문자열 필드에 대해 Protobuf가 무료 저장소 할당을 수행합니다. 따라서 Protobuf는 실제로 고주파수 메시징에 적합하지 않습니다.

내가 할 수 있으면 나는 어디에서나 Protobuf를 사용할 것이다. 풍부하고 복잡한 플랫폼 독립적 인 전방 및 후방 호환 프로토콜을 만들기위한 놀라운 도구입니다.

부칙

명이 대답을 읽고있는 것처럼 보이기 때문에, 나는 C++ Protobuf 당신이 재 사용할 수 있습니다 읽을 때 직렬화 메시지가 객체가 malloc에 ​​주파수를 줄이기 위해 배운 것을 공유해야 .

참조 최적화 팁 :

https://developers.google.com/protocol-buffers/docs/cpptutorial

+0

입력하신 James 고맙습니다. – jvaz