XServer与配置服务器,配置服务器保存有XServer的配置文件中的信息。如何在项目启动时,让XServer从配置服务器中获取到自己的配置信息,并达到通信资源的节省与控制。
通信如下:
- XServer与配置服务器都启动,没有先后顺序之分,初始配置服务器知道XServer的XServerHost和XServerPost,但是XServer不知道配置服务器的CfgHost和CfgPort;
- 配置服务器启动线程不停的向XServer发送信息Info1,信息Info1包含配置服务器的CfgHost和CfgPort,以及XServer的配置文件的版本号XServerCfgVersion=V1;
- XServer收到CfgHost、CfgPort、XServerCfgVersion后,判断从本地存储的配置文件中自己的版本号V2和V1的关系。如果V1=V2,向配置服务器发送NotRequestResource事件,意思是我不需要别的东西了,结束。如果V1!=V2,记录标记flag=true(初始flag=false);
- XServer连接配置服务器的类中启动一个线程不停的判断标记flag,如果flag=true,就向配置服务器发送RequestResource事件,意思是版本号不一样,我要我的配置资源;如果flag=false,啥都不干。
- 配置服务器收到RequestResource事件,做两件事情,一是停止发送信息Info1,二是不停的向XServer发送它的配置资源信息Info2,Info2中除了XServer的配置资源信息外,还有配置服务器的CfgHost和CfgPort。
- XServer收到Info2后,将Info1和Info2都写入到本地配置文件中,之后所有的读取都从本地配置文件中读取,同时使flag=false,然后向配置服务器发送确认消息Info3;
- 配置服务器收到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,不影响系统。
时间: 2024-10-12 12:13:43