首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有谷歌协议缓冲区的Boost.Asio

带有谷歌协议缓冲区的Boost.Asio
EN

Stack Overflow用户
提问于 2011-11-08 20:50:13
回答 1查看 5.2K关注 0票数 15

我目前正在研究如何改进我们当前的c++网络,手工序列化机制,维护我们现有的二进制协议。采用的第一种方法是使用二进制序列化使用Boost.Asio和Boost.Serialisation对其进行编码。无论如何,结果发现它比我们目前的手工实现要慢一些(10%)。有没有人有和Boost.Asio一起使用google protobuf的实际_real_work_经验?

我在谷歌上搜索样本,但只能找到这个例子:

Boost Asio with google protocol buffers sample

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-08 21:29:01

对于复杂的低消息速率协议,我们使用boost::asio和Protobuf。对于简单、高消息率的协议,我们使用boost::asio和自定义序列化。

Protobuf库使用std::string来表示它反序列化的消息的字符串字段,这意味着Protobuf会为您收到的每条消息中的每个字符串字段执行一个免费的存储分配。这使得Protobuf对于非常高频率的消息传递来说性能不是很好。

不过,如果可以的话,我会在任何地方使用Protobuf。它是一个制作丰富、复杂、平台无关、向前和向后兼容协议的绝佳工具。

附录

因为看起来人们正在阅读这个答案,我应该分享我已经了解到,在C++ Protobuf中,您可以重用反序列化消息对象来减少阅读时的malloc频率。

请参阅优化提示:

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

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8050616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档