国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > herm::cached 客户端与服务器协议一致性校验方法

herm::cached 客户端与服务器协议一致性校验方法

来源:程序员人生   发布时间:2015-04-14 08:42:13 阅读次数:3296次

cached根据protobuf的元数据机制去保存和读取数据库中的数据。

为了简化服务器交互的复杂度,逻辑服务器用的protobuf和cached的protobuf,数据结构要完全1致。

不1致的话,会出现不肯定的毛病。比如,逻辑服务器用Msg1序列化数据,传给cached, cached却用Msg2去解析,重组,保存到DB。结果就全乱了!

所以,逻辑服务器连接cached成功后,先要保证protobuf是1致的。

1. logicd从cached获得Message名字列表和所有Message的总MD5

    Message列表名字,每个文件只须给出1个Message名字便可

    这些数据在cached启动的时候,1次性生成便可。

2. logicd根据返回的Message名字列表,反查Message所在文件的所有Message,算出总MD5,判断该MD5是不是和返回的MD51致。


关于MD5计算

cached和logicd计算进程不1样。

cached

cached的protobuf的对象都从proto文件导入,动态生成protobuf对象。

1. 通过Import获得DescriptorPool;

2. 通过DescriptorPool::FindFileByName(...)获得各个FileDescriptor;

3. 从FileDescriptor,计算出MD5,最后计算总MD5。


logicd

logicd的protobuf都是编译进来的,通过DescriptorPool::generated_pool()获得DescriptPool对象。后面步骤和cached1样。

    

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生