当前位置:编程学习 > 网站相关 >>

可扩展的序列化协议

OceanBase的序列化协议是一种可扩展的协议,其基本单元为:
 
<TYPE_FLAG_FILED><Content>
 
 
一个完整的数据包是形如下面的内容:
 
<TYPE_FLAG_FILED><Content><TYPE_FLAG_FILED><Content><TYPE_FLAG_FILED><Content>.......<TYPE_FLAG_FILED><Content>
 
例如:
 
<RESERVE_PARAM_FIELD><readmode:1, trans_id:102><BASIC_FIELD_PARAM><tid:1024, cid:21, other:abc>....
 
 
接收端解析方式:
 
[cpp] 
bool more = true;  
while(more)  
{  
    MyClass.deserialize(buf, pos, flag);  
    switch(flag)  
    {  
    case RESERVE_PARAM_FIELD:  
        deserialize_readmode();  
        deserialize_trans_id();  
        break;  
    case BASIC_FIELD_PARAM:  
        deserialize_tid_cid();  
        deserialize_other();  
        break;  
    case END_PARAM:  
        more = false;  
        break;  
    }  
}  www.zzzyk.com
 
 
 
通过这种方式,可以很方便的加入新的域,而不影响与老版本程序的兼容性。新版本程序可以处理老版本程序发来的数据包,即:向后兼容。
 
 
OceanBase中大量使用了这种方式来处理,但我觉得,过于泛滥。因为: 兼容性有必要,但是没必要细化到每一个域。只要用一个比较粗的域来区分新旧版本即可,对于同一个版本内用RESERVE_PARAM_FIELD,BASIC_FIELD_PARAM这种区分每个域没必要,只需要按照约定顺序解析数据即可。
 
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,