[ChatXServer开发笔记]2019.01.28

栏目: 后端 · 发布时间: 5年前

内容简介:采用单例模式(Singleton Parttern)设计这种方式的优点:关于线程安全下的单例模式的使用,参考文章:

未登录的客户端线程池

采用单例模式(Singleton Parttern)设计 未登录的客户端线程池 ,采用静态内部类的形式保证其线程安全。之所以静态内部类能够保证单例模式的线程安全,是因为 Java 在底层针对类的加载已经做了同步处理,已经是线程安全的了。

这种方式的优点:

  • 懒加载,只有在需要的时候进行加载,节省资源
  • 在多线程共享使用一个单例时,确保线程安全

关于线程安全下的单例模式的使用,参考文章: http://blog.ihuxu.com/java-singleton-pattern-usages-for-thread-safe/

客户端线程池的主要数据结构

基于链表的阻塞队列(Linked Blocking Queue)

需要声明一个数据结构来存放“未登录的客户端”(以下简称“数据”),对于其中的“数据”操作有如下特点:

  • 先加入的“数据”优先处理,后加入的“数据”次级处理
  • 加入的数据量要有一定的限制
  • 获取数据时,如果有那么返回,如果没有就阻塞住,直到有数据时再返回
  • 添加数据时,如果容量已经达到上限,那么久阻塞,并等待一定时间,如果在达到时间上限之前有可用容量,那么添加数据;否则,报错异常。

根据以上特点,采用BlockingQueue(阻塞队列)协议实现的LinkedBlockingQueue来实现。这种队列是线程安全的,以为底层针对他的操作时已经做了同步的机制。

客户端线程的抽象化

打算按照客户端的状态将客户端的线程进行抽象,比如登录状态(LoggedClient),未登录状态(NotLoggedClient)等等。

由此一来,需要构建一下客户端的状态流转过程。这个状态流转用树型数据结构进行存储,好处在于:

  1. 能够回溯当前客户端整个证明周期的过程(如果有必要)
  2. 将状态抽象成树型的数据结构,容易理解整个生命周期
  3. 将状态抽象成树型的数据结构,可以针对不同分支下的同一个状态进行差异化处理(树型结构下,不同分支下的相同状态会用不同的状态码表示)

同时,也参考下状态机的概念和实现方案:

有限状态机(英语:finite-state machine,縮寫:FSM)又稱 有限状态 自动 ,简称 状态机 ,是表示 有限状态 以及在这些 状态 之间的转移和动作等行为的数学模型。

相关示例代码: https://github.com/elimisteve/fsm/blob/master/fsm.go

状态机设计

状态值

状态值用32位的有符号(int)整型表示,高8位代表所在的树的深度(根的深度为0),低24位代表当前层级的序号(序号自增,从0开始)


以上所述就是小编给大家介绍的《[ChatXServer开发笔记]2019.01.28》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

韦斯 (Mark Allen Weiss) / 机械工业出版社 / 2013-2-1 / 79.00元

本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。本书将算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,并细致讲解精心构造程序的方法,内容全面、缜密严格。 第3版的主要更新如......一起来看看 《数据结构与算法分析》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具