5

所以这个例子是:

我有消息类型。它在服务器 A -> B -> C 之间传递 现在假设创建了具有几个新字段/ID 的消息的 2.0 版。服务器 A 和 C 知道这种新格式,但服务器 B 仍在使用旧格式。所有服务器反序列化、检查、序列化和发送消息。假设 A 正在填充所有字段(Message 的 V1.0 和 V2.0),C 会看到 Message V2.0 的填充字段吗?

我知道协议缓冲区支持这一点。我想知道 Thrift 是否也支持它。(在我用 C# 做的一个快速测试中,答案是否定的,只是想和大家核实一下)

作为消息代码的示例,这里是 IDL:

struct Message { // V1.0
  1: i64 Id;
}

.

struct Message { // V2.0
  1: i64 Id;
  2: string Content;
}

服务器 C 会看到 A 中填充的 Message.Content 吗?

4

1 回答 1

1

答案是否定的。

关于协议缓冲区,还需要注意的是,根据文档,生成代码的 Python 版本不支持这一点。

https://developers.google.com/protocol-buffers/docs/encoding#order - “如果消息具有未知字段,当前的 Java 和 C++ 实现在顺序排序的已知字段之后以任意顺序写入它们。当前的 Python实施不跟踪未知领域。”

于 2013-01-13T17:59:30.420 回答