使用谷歌协议缓冲区的Boost.Asio

jva*_*vaz 15 c++ boost protocol-buffers boost-asio boost-serialization

我目前正在研究如何改进我们当前的c ++网络手工序列化机制,维护我们现有的二进制协议.第一种方法是使用Boost.Asio使用Boost.Serialisation使用二进制序列化对其进行编码.无论如何,它发现它比我们目前的手工制作实施有点慢(10%).任何人都有关于使用谷歌protobuf和Boost.Asio的实际_real_work_经验?

我搜索谷歌的样本,但只能得到这个例子:

使用谷歌协议缓冲样本提升Asio

有人在任何实际项目中都这样做过吗?我对性能数据非常感兴趣,因为它必须非常快......

Jam*_*ock 22

我们使用boost :: asio和Protobuf来实现复杂的低消息速率协议.对于简单的高消息速率协议,我们执行boost :: asio和自定义序列化.

C++ Protobuf库使用std :: string来表示它反序列化的消息的字符串字段,这意味着Protobuf会为您收到的每条消息中的每个字符串字段执行免费存储分配.这使得Protobuf对于真正的高频消息传输不是很有效.

如果可以的话,我会到处使用Protobuf.它是制作丰富,复杂,平台无关,前后兼容协议的绝佳工具.

附录

由于人们似乎正在阅读这个答案,我应该分享一下,我已经了解到,在C++ Protobuf中,您可以重新使用反序列化消息对象来减少阅读时的malloc频率.

请参阅优化提示:

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