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. 绕过Web授权和认证之篡改HTTP请求

    一.什么是HTTP请求 超文本传输协议(HTTP)提供了多种请求方法来与web服务器沟通.当然,大多数方法的初衷是帮助开发者在开发或调试过程中部署和测试HTTP应用.如果服务器配置不当,这些请求方法可 ...

  2. Linux 驱动之内核定时器

    1.定时器 之前说过两类跟时间相关的内核结构. 1.延时:通过忙等待或者睡眠机制实现延时. 2.tasklet和工作队列,通过某种机制使工作推后运行,但不知道运行的详细时间. 接下来要介绍的定时器,可 ...

  3. 1z0-052 q209_4

    4: You have two tables with referential integrity enforced between them. You need to insert data to ...

  4. sqlserver 创建对某个存储过程执行情况的跟踪

    有时候需要抓取执行存储过程时某个参数的值,有时候程序调用存储过程执行后结果不太对,不确定是程序的问题还是存储过程的问题,需要单独执行存储过程看结果 即可用下面的方法 --=============== ...

  5. 学习KNN

    转:© 著作权归作者所有 by ido 什么是KNN算法呢?顾名思义,就是K-Nearest neighbors Algorithms的简称.我们可能都知道最近邻算法,它就是KNN算法在k=1时的特例 ...

  6. centos7安装MySQL5.7无法设置密码问题

    前言 在使用centos7系统yum方式安装MySQL5.7后 不知道默认密码是多少  知道后没办法修改? 一.找到MySQL密码 service mysqld start vim /var/log/ ...

  7. java测试Unicode编码以及数组的运用(初学篇)

    /*第二章第四小题*/ /* * (1)编写一个应用程序,给出汉字“你” ,“我”,“他”在Unicode 表中的位置 * (2)编写一个java应用程序,输出全部的希腊字母 */ public cl ...

  8. 【LeetCode】52. N-Queens II

    N-Queens II Follow up for N-Queens problem. Now, instead outputting board configurations, return the ...

  9. PHP5.4新特性

    PHP5.4 此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问, PHP 5.4.0 性能大 ...

  10. editplus发布3.01 Build 446 Final版(附下载及中文版)

    http://www.cnblogs.com/JustinYoung/archive/2008/04/14/editplus-301.html没有什么好说的,我个人最喜欢的编辑器.除了windows和 ...