thrift


1,使用optional字段,不用判断是否设置。如果没有设置,内容为0(int)或者空(string)。



2,optional字段设置时,只能用__set_xx()赋值,否则无效。



3,required字段设置时,可以直接=赋值,也可以__set_xx()赋值。



4,更改字段的名字后,发送端更新,而接收端不更新,照样接收成功。只会带来编译问题。



5,更改字段的类型,如果该字段为optional,接收端其他字段照样接收,只是该字段的值为空(或0)。
如果该字段为required,接收端接收错误:无效数据格式(Invalid data)。
TProtocolException: Invalid data



6,末尾添加字段(不在末尾添加字段,相当于字段改名和修改类型)
optional和required都不会出错。此时发送端和接收端最好都更新,否则没有意义。



7,字段先后顺序可以改变,但字段前面对应的号不能改变,否则Invalid data。
顺序改变后,数字不是递增的,看来不爽。



8,删除字段(不管是中间的字段,还是末尾的字段)
如果删除的字段是required,则Invalid data,如果是optional,正常。



9,如果修改的字段是optional的另一个结构体,如果该字段不设置,任何修改都不会出错。一旦设置,就需要解析该结构体,解析出错
接收端显示:Invalid data
发送端显示:No more data to read.



10,假设存在这样的数据流,数据a由A发送给B,经过B处理后发送给C。如果数据a增加optional字段后,重新编译A和C,C接收到的数据a中新添加字段无效。如果再重新编译B,C接收到的数据该字段正常。可能原因:未编译的B由于不识别新加字段,所以解析时丢弃,发送给C的数据就缺失该字段。


Category web