本文共 709 字,大约阅读时间需要 2 分钟。
thrift 使用小结 2012-09-24 18:15:20| 分类: 编程 | 标签:thrift optional |字号 订阅 最近在使用thrift的时候,C++遇到optional属性时,遇到问题:虽然赋值,但thrift不会把值送过去。 thrift文件内容可能会随着时间变化的。如果已经存在的消息类型不再符合设计要求,比如,新的设计要在message格式中添加一个额外字段,但你仍想使用以前的thrift文件产生的处理代码。如果想要达到这个目的,只需: (1) 不要修改已存在域的整数编号 (2) 新添加的域必须是optional的,以便格式兼容。对于一些语言,如果要为optional的字段赋值,需要特殊处理,比如对于C++语言,要为 struct Example{ 1 : i32 id, 2 : string name, 3 : optional age, } 中的optional字段age赋值,需要将它的__isset值设为true,这样才能序列化并传输或者存储(不然optional字段被认为不存在,不会被传输或者存储), Example example; ...... example.age=10, example.__isset.age = true; //__isset是每个thrift对象的自带的public成员,来指定optional字段是否启用并赋值。 ...... 这里没有设置,虽然赋值了,但thrift不认。 (3) 非required域可以删除,前提是它的整数编号不会被其他域使用。对于删除的字段,名字前面可添加“OBSOLETE_”以防止其他字段使用它的整数编号。
转载地址:http://iuexx.baihongyu.com/