client-server - 如何知道从服务器传入的 protobuf 消息的大小?
问题描述
我有一个服务器客户端应用程序。服务器使用 C++,而客户端使用 C#。当客户端在 Windows 中时,服务器可能在 Linux 实例上运行。因此,我们不能对架构和字节序做出任何假设。我正在使用 protobuf 来回发送数据结构。目前采用的策略是发送一条消息作为头,其中包含下一条消息的大小,这是一个大数据结构。看起来像:
message message_size {
required fixed64 size = 1;
}
有没有办法知道protobuf将在两端发送多少字节,即上述结构将被序列化为多少字节?
解决方案
这里的最终问题是根 protobuf 消息没有长度前缀(按设计)。没有明确的商定 API 用于处理开放流上的多条消息,因此基本上:您关心编码和处理的任何长度前缀都可以工作。一种常见的模式是使用带有虚拟字段编号的 protobuf 规则来处理它;在 protobuf-net 的情况下,这就是它SerializeWithLengthPrefix
的DeserializeWithLengthPrefix
作用;但是:这可能不容易从 C++ 中获得。使用固定宽度/字节序规则手动编码长度可能更容易,然后立即转储原始有效负载。
推荐阅读
- android - 如何设置 Firebase 自定义定义?
- javascript - 获取下周特定时间的价值
- python - 并行运行 python vaex.ml.catboost.CatBoostModel.fit 的正确方法是什么?
- tensorflow - 即使在清除并删除文件后也无法卸载 cuda
- c - 为什么它指向同一个地址?
- sql - 在oracle中将行值添加到列
- css - 使用css引导程序中的自定义活动按钮链接
- c++ - C++ 通过 ifsteam 或 cin 读取重音字符
- java - Spring Security 为注册 API 添加自定义过滤器链
- flutter - 尝试在 Flutter 应用上添加上传视频和观看视频