当thrift再次反序列化并序列化时,它是否会持久保存未知的字段/字节?

时间:2013-01-10 17:57:56

标签: c# protocol-buffers thrift

所以这个例子就是:

我有Message类型。它在服务器A - >之间传递。 B - > C 现在让我们假设创建了具有几个新字段/ ID的Message 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

1 个答案:

答案 0 :(得分:1)

答案是

关于协议缓冲区,同样重要的是要注意,根据文档,生成的代码的Python版本不支持此功能。

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