2011-11-08 25 views
15

Actualmente estoy investigando formas de mejorar nuestro mecanismo actual de serialización hecho a mano en red de C++ manteniendo nuestro protocolo binario existente. El primer enfoque adoptado fue codificarlo usando Boost.Asio con Boost.Serialisation usando serialización binaria. De todos modos, resultó que es algo más lento (10%) que nuestra implementación actual hecha a mano. ¿Alguien tiene una experiencia real de _real_work_ sobre el uso de Google protobuf junto con Boost.Asio?Boost.Asio con buffers de protocolo de Google

busqué en Google de muestras, pero sólo fue capaz de llegar arriba con este ejemplo:

Boost Asio with google protocol buffers sample

¿Alguien ha hecho esto en cualquier proyecto actual? Me interesaron las cifras de rendimiento, ya que esto tiene que ser bastante rápido ...

+0

¿Se puede unir la imagen que muestra la figura? –

+0

Lo siento, no puedo revelarlo :( – jvaz

Respuesta

22

Usamos boost :: asio y Protobuf para protocolos complejos de baja tasa de mensajes. Para protocolos de tasa de mensajes altos y simples, realzamos :: asio y serialización personalizada.

La biblioteca de C++ Protobuf usa std :: string para representar los campos de cadena para mensajes que se deserializan, lo que significa que Protobuf realiza una asignación de tienda gratuita para cada campo de cadena en cada mensaje que recibe. Eso hace que Protobuf no sea muy eficiente para mensajes de alta frecuencia.

Aunque usaría Protobuf en todas partes si pudiera. Es una herramienta maravillosa para hacer protocolos ricos, complejos, independientes de la plataforma y compatibles con versiones anteriores y posteriores.

ADENDA

ya que parece que la gente está leyendo esta respuesta, que debería compartir lo que he aprendido que en C++ Protobuf se puede reutilizar objetos de mensajes deserialización para reducir la frecuencia malloc al leer .

Ver Consejos de optimización:

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

+0

Gracias James por su aporte, muy apreciado :) – jvaz

Cuestiones relacionadas