带有 google 协议缓冲区的 Boost.Asio

发布于 2024-12-14 04:42:09 字数 427 浏览 0 评论 0原文

我目前正在研究改进当前 C++ 网络手工序列化机制的方法,同时维护现有的二进制协议。 采用的第一种方法是使用 Boost.Asio 和使用二进制序列化的 Boost.Serialization 对其进行编码。不管怎样,事实证明它比我们当前的手工实现要慢一些(10%)。有人有关于将 google protobuf 与 Boost.Asio 一起使用的实际_real_work_经验吗?

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

Boost Asio with google protocol buffers示例

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

I've currently investigating ways of improving our current c++ network hand-made serialization mechanism maintaining our existing binary protocol.
The first approach taken was to code it using Boost.Asio with Boost.Serialisation using binary serialization. Anyway it turned up that it's somewhat slower (10%) that our current hand-made implementation. Anyone has actual _real_work_ experience about using google protobuf together with Boost.Asio ?

I searched google for samples but was only able to come-up with this example:

Boost Asio with google protocol buffers sample

Does anybody did this in any actual project ? I've very interested performance figures since this has to be quite fast...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心碎无痕… 2024-12-21 04:42:09

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

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

不过,如果可以的话,我会在任何地方使用 Protobuf。它是一个非常棒的工具,可以用来创建丰富、复杂、平台独立、向前和向后兼容的协议。

ADDENDUM

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

请参阅优化提示:

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

We use boost::asio and Protobuf for complex, low message rate protocols. For simple, high message rate protocols we do boost::asio and custom serialization.

The C++ Protobuf library uses std::string to represent the string fields for messages that it deserializes, which means a free store allocation is performed by Protobuf for every string field in every message you receive. That makes Protobuf not very performant for really high frequency messaging.

I would use Protobuf everywhere if I could, though. It's a marvelous tool for making rich, complex, platform independent, forward-and-backward-compatible protocols.

ADDENDUM

Since it seems like people are reading this answer, I should share that I've learned that in C++ Protobuf you can re-use deserialization message objects to reduce the malloc frequency when reading.

See Optimization Tips:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文