码迷,mamicode.com
首页 > 其他好文 > 详细

基于乐观锁的配置服务器与XServer的交互

时间:2015-06-11 23:02:42      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:乐观锁   配置服务器   config-ini   通信问题   

  XServer与配置服务器,配置服务器保存有XServer的配置文件中的信息。如何在项目启动时,让XServer从配置服务器中获取到自己的配置信息,并达到通信资源的节省与控制。


通信如下:

  1. XServer与配置服务器都启动,没有先后顺序之分,初始配置服务器知道XServer的XServerHost和XServerPost,但是XServer不知道配置服务器的CfgHost和CfgPort;

  2. 配置服务器启动线程不停的向XServer发送信息Info1,信息Info1包含配置服务器的CfgHost和CfgPort,以及XServer的配置文件的版本号XServerCfgVersion=V1;

  3. XServer收到CfgHost、CfgPort、XServerCfgVersion后,判断从本地存储的配置文件中自己的版本号V2和V1的关系。如果V1=V2,向配置服务器发送NotRequestResource事件,意思是我不需要别的东西了,结束。如果V1!=V2,记录标记flag=true(初始flag=false);

  4. XServer连接配置服务器的类中启动一个线程不停的判断标记flag,如果flag=true,就向配置服务器发送RequestResource事件,意思是版本号不一样,我要我的配置资源;如果flag=false,啥都不干。

  5. 配置服务器收到RequestResource事件,做两件事情,一是停止发送信息Info1,二是不停的向XServer发送它的配置资源信息Info2,Info2中除了XServer的配置资源信息外,还有配置服务器的CfgHost和CfgPort。

  6. XServer收到Info2后,将Info1和Info2都写入到本地配置文件中,之后所有的读取都从本地配置文件中读取,同时使flag=false,然后向配置服务器发送确认消息Info3

  7. 配置服务器收到Info3后,停止向XServer发送信息Info2,结束。


注意问题:

  • 假如当XServer和配置服务器都在运行中,这时配置服务器修改了XServer的配置资源,事件触发这时配置服务器得不停向XServer发送Info1和Info2,直到收到确认Info3;

  • 假如XServer和配置服务器都在运行中,一是突然配置服务器断了,稍后重启,向XServer发送Info1,XServer收到后判断V1=V2,发送NotRequestResource,结束;二是突然XServer断了,分两种可能,断期间配置服务器中XServer的配置资源未改,重启XServer无碍,断期间配置资源改动了,一旦改动,执行上面的不停向XServer发送Info1和Info2,等到XServer重启,也能收到Info1和Info2,不影响系统;

  • 假如XServer收到Info1后,发送RequestResource事件,配置服务器收到RequestResource事件,停止了Info1发送,但Info2发送前

    – XServer断掉,分两种情况,一是配置服务器CfgHost和CfgPort不变,配置服务器由于未收到确认Info3而一直发送Info2,重启XServer,XServer能收到Info2,这里加Info3确认可以,也可以在配置服务器端监听连接,有服务模块连接到它,它就向之发送Info1。这时上面的情况中当重启XServer,配置服务器检测到XServer连接到它了,发送Info1;二是期间配置服务器CfgHost和CfgPort改变了,配置服务器由于未收到确认Info3而一直发送Info2,如果Info2中不带CfgHost和CfgPort,那么万一下次指不定什么时候XServer断开了,由于配置服务器的CfgHost和CfgPort改了,就再也连不上了;
    –配置服务器断掉了,重启配置服务器,它发送Info1,不影响系统。

基于乐观锁的配置服务器与XServer的交互

标签:乐观锁   配置服务器   config-ini   通信问题   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/46462047

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