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. Struts2(四)Action一接收参数

    一.属性接收参数并输出 导入struts2的包,导入需要的包 和struts.xml配置文件 <?xml version="1.0" encoding="UTF-8 ...

  2. poj 1879 Truck History

    本题链接:点击打开链接 题目大意: 输入n表示卡车辆数,输入每辆卡车编号.即长度为7的字符串,每辆卡车编号均可由其他类型编号衍生过来,求由当中一辆衍生出其他全部的最小衍生次数(有一个字符不同就需衍生一 ...

  3. Win10怎么设置点击任务栏上文件夹图标直接打开“我的电脑”?

    我们都知道Win10任务栏上的文件夹图标可以打开文件资源管理器,但是点击这个图标后打开的位置却是不固定的,有可能是库文件夹,也有可能是其他常用的位置.怎么设置点击这个图标后直接打开"此电脑& ...

  4. Java获取登录用户IP地址

    /** * 获取登录用户IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest r ...

  5. Android Bitmap与String互转(转)

    /** * 图片转成string * * @param bitmap * @return */ public static String convertIconToString(Bitmap bitm ...

  6. Jsp和session、request.getSession()

    request.getSession(false); 这段代码代表,如果没有和当前request关联的session则不创建session并且返回空 request.getSession(true); ...

  7. Oracle-client支持exp|imp|rman

    官方精简版的驱动,不支持持exp/imp/rman,故需要安装oracle_client客户端. 实验环境: Centos6.5 x64   Oracle 11.2.0.4.0 Oracle_clie ...

  8. 很幽默的讲解六种Socket IO模型

    很幽默的讲解六种Socket IO模型 本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教. 一:select模型二:WSAAsyncSelect ...

  9. 【laravel5.4】vue分页删除

    1.a标签执行ajax删除,后台删除成功后,执行vue分页对象删除对应数据 VUE.js

  10. request.getcontextPath() 详解(转)

    本文转自:http://blog.csdn.net/pengxuan/article/details/6604578 <%=request.getContextPath()%>是为了解决相 ...