【问题标题】:Extending Protocol Buffers to use an existing protocol?扩展协议缓冲区以使用现有协议?
【发布时间】:2014-10-03 18:07:54
【问题描述】:

据我了解,Protocol Buffers 主要用于同时控制服务器和客户端代码的项目。我的一般问题是 - 可以使用协议缓冲区将二进制消息序列化/反序列化到使用现有协议的服务器吗?所以,我的问题:

  1. Protocol Buffers 本身是否支持在文本文件中定义消息然后指定如何序列化/反序列化的能力?例如,假设整数在服务器上是大端,在客户端是小端。是否有任何原生关键字会考虑到这一点?另一个例子 - 如果一个字符串作为字符串中每个字符的一个字节传递并且具有固定长度或使用 2 个字节来指定长度,是否有一个本地关键字来指定这个,以便序列化/反序列化可以正确完成?

  2. 如果 Protocol Buffers 不支持任何方式来对现有协议的序列化/反序列化进行本地微调,那么是否可以通过扩展添加该功能? 是否可以以某种方式添加序列化/反序列化方法可以识别的关键字?也许这可以通过扩展或修改 protobuf-csharp-port 或 protobuf-net 中的代码来完成? .proto 文件可以使用一种称为序列化类型的新型关键字,可用于指定字段的序列化行为类型。 如果实现序列化类型的方法被实现为公共虚函数,那么自定义类可以覆盖该行为以进行专门处理。我能想到的唯一另一件事是,由于协议缓冲区使用模式,它可以在处理来自服务器的消息时使用它,但不应尝试将其发送到服务器或期望来自服务器的任何类型的模式消息服务器。是否需要做任何其他事情才能使所有这些都与协议缓冲区一起工作?

  3. 在这个link 中,比较了protobuf-csharp-port 和protobuf-net。看起来 protobuf-net 更快。但是,哪种实现最适合实现一种新的序列化类型,可用于微调对如何序列化/反序列化类型的控制?

  4. 如果您认为在协议缓冲区中包含此功能不合适,那么是否有任何 API 可以获取包含二进制消息描述的文本文件并将其转换为 C#正确进行序列化和反序列化的类?我已经熟悉 API XSD2Code,它使用 XML 文件进行序列化/反序列化。但这在这里没有用,因为数据是二进制的,而不是 XML。

【问题讨论】:

标签: c# serialization code-generation protocol-buffers protobuf-net


【解决方案1】:

1:不,协议缓冲区是单一定义的格式;有一些不同的选择(varint vs fixed length vs zigzag),但是:不是你想要的

2:没有

3:不适用,2

我无法评论 4

【讨论】:

    【解决方案2】:

    在考虑了一夜之后,似乎确实有一个解决方案 - 尽管没有协议缓冲区。 XSD2Code 可以将 XSD 文件或 XML 文件作为输入,并生成提供序列化/反序列化方法作为输出的 C# 类。

    所以,真正需要做的就是编写一个小型实用应用程序,将包含二进制接口描述的文本文件转换为适当的 XML 文件 - 然后通过XSD2Code 运行该输出 XML 文件以生成 C#班级。这应该不难做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2016-12-19
      • 2011-09-18
      • 2021-12-19
      • 2011-11-15
      相关资源
      最近更新 更多