内容简介:采用单例模式(Singleton Parttern)设计这种方式的优点:关于线程安全下的单例模式的使用,参考文章:
未登录的客户端线程池
采用单例模式(Singleton Parttern)设计 未登录的客户端线程池 ,采用静态内部类的形式保证其线程安全。之所以静态内部类能够保证单例模式的线程安全,是因为 Java 在底层针对类的加载已经做了同步处理,已经是线程安全的了。
这种方式的优点:
- 懒加载,只有在需要的时候进行加载,节省资源
- 在多线程共享使用一个单例时,确保线程安全
关于线程安全下的单例模式的使用,参考文章: http://blog.ihuxu.com/java-singleton-pattern-usages-for-thread-safe/
客户端线程池的主要数据结构
基于链表的阻塞队列(Linked Blocking Queue)
需要声明一个数据结构来存放“未登录的客户端”(以下简称“数据”),对于其中的“数据”操作有如下特点:
- 先加入的“数据”优先处理,后加入的“数据”次级处理
- 加入的数据量要有一定的限制
- 获取数据时,如果有那么返回,如果没有就阻塞住,直到有数据时再返回
- 添加数据时,如果容量已经达到上限,那么久阻塞,并等待一定时间,如果在达到时间上限之前有可用容量,那么添加数据;否则,报错异常。
根据以上特点,采用BlockingQueue(阻塞队列)协议实现的LinkedBlockingQueue来实现。这种队列是线程安全的,以为底层针对他的操作时已经做了同步的机制。
客户端线程的抽象化
打算按照客户端的状态将客户端的线程进行抽象,比如登录状态(LoggedClient),未登录状态(NotLoggedClient)等等。
由此一来,需要构建一下客户端的状态流转过程。这个状态流转用树型数据结构进行存储,好处在于:
- 能够回溯当前客户端整个证明周期的过程(如果有必要)
- 将状态抽象成树型的数据结构,容易理解整个生命周期
- 将状态抽象成树型的数据结构,可以针对不同分支下的同一个状态进行差异化处理(树型结构下,不同分支下的相同状态会用不同的状态码表示)
同时,也参考下状态机的概念和实现方案:
有限状态机(英语:finite-state machine,縮寫:FSM)又稱 有限状态 自动 机 ,简称 状态机 ,是表示 有限 个 状态 以及在这些 状态 之间的转移和动作等行为的数学模型。
相关示例代码: https://github.com/elimisteve/fsm/blob/master/fsm.go状态机设计
状态值
状态值用32位的有符号(int)整型表示,高8位代表所在的树的深度(根的深度为0),低24位代表当前层级的序号(序号自增,从0开始)
以上所述就是小编给大家介绍的《[ChatXServer开发笔记]2019.01.28》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Python
Mark Lutz / O'Reilly Media / 2006-8-30 / USD 59.99
Already the industry standard for Python users, "Programming Python" from O'Reilly just got even better. This third edition has been updated to reflect current best practices and the abundance of chan......一起来看看 《Programming Python》 这本书的介绍吧!