XServer与配置server,配置server保存有XServer的配置文件里的信息。

怎样在项目启动时。让XServer从配置server中获取到自己的配置信息,并达到通信资源的节省与控制。


通信例如以下:

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

  2. 配置server启动线程不停的向XServer发送信息Info1。信息Info1包括配置server的CfgHost和CfgPort。以及XServer的配置文件的版本XServerCfgVersion=V1;

  3. XServer收到CfgHost、CfgPort、XServerCfgVersion后。推断从本地存储的配置文件里自己的版本V2和V1的关系。假设V1=V2。向配置server发送NotRequestResource事件,意思是我不须要别的东西了,结束。假设V1!

    =V2,记录标记flag=true(初始flag=false);

  4. XServer连接配置server的类中启动一个线程不停的推断标记flag。假设flag=true,就向配置server发送RequestResource事件,意思是版本不一样,我要我的配置资源。假设flag=false。啥都不干。

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

  6. XServer收到Info2后,将Info1和Info2都写入到本地配置文件里,之后全部的读取都从本地配置文件里读取,同一时候使flag=false,然后向配置server发送确认消息Info3

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


注意问题:

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

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

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

    – XServer断掉,分两种情况。一是配置serverCfgHost和CfgPort不变。配置server因为未收到确认Info3而一直发送Info2。重新启动XServer,XServer能收到Info2。这里加Info3确认能够。也能够在配置server端监听连接,有服务模块连接到它,它就向之发送Info1。这时上面的情况中当重新启动XServer。配置server检測到XServer连接到它了,发送Info1。二是期间配置serverCfgHost和CfgPort改变了,配置server因为未收到确认Info3而一直发送Info2,假设Info2中不带CfgHost和CfgPort,那么万一下次指不定什么时候XServer断开了,因为配置server的CfgHost和CfgPort改了,就再也连不上了;

    –配置server断掉了,重新启动配置server,它发送Info1。不影响系统。

基于乐观锁的配置server与XServer的交互的更多相关文章

  1. 3:基于乐观锁(两种)控制并发: version、external锁

    ES是基于乐观锁进行并发控制的. 如果有并发的业务场景,可以直接使用ES内置乐观锁机制. 使用的时候,java程序需要先Get指定的记录,获取到版本号,然后Put的时候,带着该版本号,请求更新. ES ...

  2. Java并发 行级锁/字段锁/表级锁 乐观锁/悲观锁 共享锁/排他锁 死锁

    原文地址:https://my.oschina.net/oosc/blog/1620279 前言 锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制. 数据库采用封锁技术保证并发操作 ...

  3. JAVA乐观锁实现-CAS

    是什么 全称compare and swap,一个CPU原子指令,在硬件层面实现的机制,体现了乐观锁的思想. JVM用C语言封装了汇编调用.Java的基础库中有很多类就是基于JNI调用C接口实现了多线 ...

  4. B8 Concurrent JDK中的乐观锁与原子类

    [概述] 乐观锁采用的是一种无锁的思想,总是假设最好的情况,认为一个事务在读取数据的时候,不会有别的事务对数据进行修改,只需要在修改数据的时候判断原数据数据是否已经被修改了.JDK 中 java.ut ...

  5. java多线程系列3:悲观锁和乐观锁

    1.悲观锁和乐观锁的基本概念 悲观锁: 总是认为当前想要获取的资源存在竞争(很悲观的想法),因此获取资源后会立刻加锁,于是其他线程想要获取该资源的时候就会一直阻塞直到能够获取到锁: 在传统的关系型数据 ...

  6. MyBatisPlus乐观锁,乐观锁竟然如此简单

    乐观锁 在便是过程中,我们经常会被问到乐观锁,悲观锁,都非常简单 乐观锁:顾名思义,思想十分乐观,总是认为不会出现问题,无论什么都不去上锁!如果出现了问题,就再更新测试 悲观锁:顾明思义,思想十分悲观 ...

  7. redis乐观锁

    乐观锁(又名乐观并发控制,Optimistic Concurrency Control,缩写"OCC"),是一种并发控制的方法.它假设多用户并发的事务在处理时不会彼此互相影响,各事 ...

  8. AtomicInteger源码分析——基于CAS的乐观锁实现

    AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...

  9. AtomicInteger源码分析——基于CAS的乐观锁实

    1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及 ...

随机推荐

  1. 使用curl在命令行中下载文件

    http://m.blog.csdn.net/blog/mayadong7349/7019208 使用curl在命令行中下载文件 linux下curl简单应用详解 http://blog.sina.c ...

  2. MySQL双主如何解决主键冲突问题

    搭建了个双主,突然想到如果表设置了自增主键的话,当业务同时向双库中插入一条数据,这时候情况是什么样子的呢? 比如:主库A和主库B上的一个表数据为: 12 'ninhao' .当业务同时写入数据后主库A ...

  3. plsql 常用快捷键(自动替换)

      plsql 常用快捷键 CreateTime--2018年4月23日17:33:05 Author:Marydon 说明:这里的快捷键,不同于以往的快捷键,输入指定字符,按快捷键,可以自动替换成你 ...

  4. Android进程注入

    全部代码在这里下载:http://download.csdn.net/detail/a345017062/8133239 里面有两个exe.inj是一个C层进程注入的样例.inj_dalvik是我写的 ...

  5. C#:定义窗口快捷键

    事情的关键是要设置Form的KeyPreview属性,然后再在KeyDown事件中检查按键. public class TEST : Form { public TEST() { Initialize ...

  6. HighCharts画时间趋势图,标示区以及点击事件操作

    最近在用HighCharts画趋势图,如果按照设计文档上来画那太复杂了,于是根据自己多年的经验改动了设计文档,添加了highcharts的标示区,然而我也发现,最后一次画highchart趋势图还是在 ...

  7. 锋利的jQuery(第二版)源码下载地址

    书上给的http://cssrain.sinaapp.com无法访问 问作者邮箱要的: 第1版源码:百度云盘下载:http://pan.baidu.com/share/link?shareid=104 ...

  8. HDUOJ----(1016)Prime Ring Problem

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. iOS拦截导航栏返回按钮事件的正确方式

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

  10. 【jQuery】将form表单通过ajax实现无刷新提交

    //将form转换为AJAX提交 function ajaxSubmit(url,frm,fn){ var dataPara=getFormJson(frm); $.ajax({ url:url, t ...