【问题标题】:Which serialization for sending protobuf via sockets in C++?在 C++ 中通过套接字发送 protobuf 的序列化是什么?
【发布时间】:2011-08-05 20:45:29
【问题描述】:

在 C++ 中通过 socket 发送序列化的 protobuf 数据时,哪种序列化最有意义?我用的是升压插座。

到目前为止,我通过套接字发送 std::strings。我可以选择将 protobuf 对象序列化为字符串并通过套接字发送此字符串。

与 protobuf 提供的其他序列化类型相比,这是慢还是慢?

【问题讨论】:

  • @Marc Gravell 发送字符串,protobuf 对象被序列化为通过套接字发送的字符串。
  • 我不能直接谈论 C++ 版本(因为我专注于 C#),但我的 期望 是直接发送到基于流的方法应该更多高效的。不过,如果没有熟悉 C++ 的人路过,您可能需要进行概要分析。

标签: c++ sockets serialization protocol-buffers


【解决方案1】:

没有。所有序列化方法都使用相同的算法生成相同的输出。您将拥有的唯一节省是及时地对数据进行记忆,也许还有所用的内存量。对于所有合理大小的协议缓冲区,这可以忽略不计。

一般来说,您应该选择使您的代码最易读的序列化方法。

【讨论】:

  • @Smokey-canoe 我认为发送字符串和发送字节编码流之间存在性能差异。我的信息不会变得足够大,但我想当字符串变成拥抱时它不贵?!
  • SerializeToString() 实际上只返回一个字符串对象,其中包含与 ToArray 或任何其他序列化方法相同的字节。唯一的区别是存储字节的数据结构。(尝试 cout
  • @platzhirsh,您担心为每个字节对套接字进行单独的write(2) 调用,这很慢。使用 protobuf 的 SerializeToString() 然后写出应该足够快。如果您担心性能,SerializePartialToZeroCopyStream() 将是一个更好的选择,尽管这两种选择都不慢。
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2011-05-14
  • 2011-06-21
相关资源
最近更新 更多