如何使结构对象在Thrift IDL中可以包含任何其他字段

时间:2017-10-23 21:05:31

标签: thrift

如何使任何struct对象包含struct本身未定义的任何字段。例如

struct Point {
   1: required x i32
   2: optional y i32
}

不,如果有人在结构中传递z变量,它也会通过。那么,我如何使结构处理额外的字段?

1 个答案:

答案 0 :(得分:1)

关于Thrift的一个关键点是IDL提前定义了所有内容,因此生成的代码非常紧凑且非常简单(因此速度很快)。所以一般来说,这在设计上是不可能的。

虽然可以选择将其他数据视为blob(文本或二进制),然后通过其他方式对其进行解/序列化,这可能是一种选择:

struct Point {
   1: x i32
   2: y i32
   3: binary more_data
}

more_data字段可以通过其他Thrift步骤进行位序列化,也可以是......完全不同,如压缩JSON或其他最适合的。

这种方法的明显缺点是你需要两个步骤来序列化和反序列化只有一个:你需要一个用于内部blob内容,一个用于外部Thrift包。这是否是您的用例问题 - 我无法告诉您。