说明:以下类图只画出了基础的核心类和主要关系,弱的依赖关系没有画出来。
应用场景:
在很多应用中,会有一个中心节点(在这里叫作Center,它可以是Master,也可以不是),每个节点都要和Center建立通讯,两者之间会有心跳等,Center还可能下发一些控制命令,这个模型是定的,只是具体的命令字会存在差异和不同的处理。mooon-agent就是为解决这个问题而设计的,提供一个可重用的agent框架,通过抽象命令处理成抽象接口ICommandProcessor,以实现支持不行应用要求的命令字处理。同时对一些常用的行为进行封装内置,以提升使用效率。
简述:
以CAgentContext类为入口,以CAgentThread为中心。为何以CAgentThread为中心,因为以它为中心时,以减少对象之间的关联层次。ICommandProcessor是一个回调接口,由使用者实现,用于对指定命令字的处理,但mooon-agent会内置一些CommandProcessor。CResourceThread是用来定时获取系统状态信息的,如CPU信息、内存信息、流量信息等。CSendMachine和CRecvMachine是两个状态机,分别处理消息发送和消息接收。限制同一时刻只能会有一个CAgentConnector,它是用来连接Center的,Center就是通常所说的主控或Master,同一时刻只会有一个主Master,但发生主备Master切换时,要求能够连接到备Master,因此需要多CCenterHost,它的IP信息通过域名指定,初次和需要重连接时,都会对域名重新进行解析,但考虑到域名服务器也存在不可用的时候,所以如果没有解析到新的IP,是使用上一次解析到的IP,以增强可用性。
主要功能包括:
1.定时的心跳(但请注意心跳只有在指定的时间内无数据发送给Center时,才会发送心跳)
2.异步数据接收和发送(前提:要求连接已建立,否则CAgentThread会被阻塞在建立连接阶段)
3.数据上报(所以需要上报的数据都必须衔存于CReportQueue,然后由CAgentThread调度上报)
4.命令字处理框架(实现ICommandProcessor接口,并注入mooon-agent即可)
5.内置的CommandProcessor(实现通用的,由参数控制是否启用)
6.精确到秒级的时间(很多情况只需要到秒级,这样可以减少对time()函数的系统调用)
7.定时的系统资源(可以用来取得CPU、内存、流量等数据)
转载于:https://blog.51cto.com/mooon/909819