注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 
关于我

砍过人吸过粉站在路边接过吻 当过兵站过岗耍过流氓入过党 上过班下过岗打过领导得过奖

网易考拉推荐

thrift 使用小结  

2012-09-24 18:15:20|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近在使用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_”以防止其他字段使用它的整数编号。


  评论这张
 
阅读(741)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016