码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-04-08 15:06:37      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

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

    Message列表名字,每一个文件只须给出一个Message名字即可

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

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


关于MD5计算

cached和logicd计算过程不一样。

cached

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

1. 通过Import获取DescriptorPool;

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

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


logicd

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

    

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

标签:

原文地址:http://blog.csdn.net/xnn2s/article/details/44939603

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!