如何知道从服务器传入的protobuf消息的大小?

时间:2018-05-15 22:49:37

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

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

message message_size {
    required fixed64  size = 1;
}

有没有办法可以知道protobuf将在两端发送多少字节,这是上述结构序列化的字节数?

1 个答案:

答案 0 :(得分:1)

这里的最终问题是根protobuf消息不是长度前缀(按设计)。没有明确约定的API来处理开放流上的多个消息,所以基本上:您需要编码和处理的任何长度前缀都可以工作。一种常见的模式是使用具有虚拟字段编号的protobuf规则来处理它;在protobuf-net的情况下,这是SerializeWithLengthPrefixDeserializeWithLengthPrefix的作用;但是:C ++可能无法轻易获得。使用固定宽度/字节顺序规则手动编码长度可能更容易,然后立即转储原始有效负载。