【问题标题】:How to know size of protobuf message incoming from server?如何知道从服务器传入的 protobuf 消息的大小?
【发布时间】:2018-05-15 22:49:36
【问题描述】:

我有一个服务器-客户端应用程序。服务器使用 C++,而客户端使用 C#。当客户端在 Windows 中时,服务器可能在 Linux 实例上运行。因此,我们不能对架构和字节序做出任何假设。我正在使用 protobuf 来回发送数据结构。目前采用的策略是发送一条消息作为头,其中包含下一条消息的大小,这是一个大数据结构。它看起来像:

message message_size {
    required fixed64  size = 1;
}

有没有办法可以知道protobuf会在两端发送多少字节,也就是上面的结构会被序列化成多少字节?

【问题讨论】:

    标签: client-server protobuf-net protobuf-c


    【解决方案1】:

    这里的最终问题是根 protobuf 消息没有长度前缀(按设计)。没有明确的商定 API 用于处理开放流上的多条消息,因此基本上:您关心编码和处理的任何长度前缀都可以工作。一种常见的模式是使用带有虚拟字段编号的 protobuf 规则来处理它;对于 protobuf-net,这就是 SerializeWithLengthPrefixDeserializeWithLengthPrefix 所做的;但是:这可能不容易从 C++ 中获得。使用固定宽度/字节序规则手动编码长度可能更容易,然后立即转储原始有效负载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多