您的位置:首页 > 其它

大后台应用服务器框架

2010-05-17 14:02 190 查看
对服务器整个框架的简单描述,方便后来者理清思路,快速开发。

服务器框架的搭建的主要思路就是以面向对象的处理方法,将各个模块的功能划分清楚,尽能使每一个模块都独立的完成一个功能,像堆积木一样构造服务器。使每一个模块独立的好处是在以后的编程中能够更好的复用已经完成的功能。
指导思路是将程序划分成两个层次,框架层与规约层。框架层就是将程序中整个数据收发过程的与规约无关的架构抽象出来,在规约层之上的层次,数据的通讯通道,收发数据帧的通道,拆分一级XML等都是属于框架层的内容。规约层顾名思义,就是涉及规约内容的层次,是每种规约的具体实现,不同的规约在框架层的处理是一样的,在规约层则是根据规约的不同有不同的处理过程。当框架层设计好了之后,以后对程序的扩展就与框架层无关了,每增加一种规约就是在规约层中增加一种规约的处理。
框架层:
通讯通道、数据接收通道、数据发送通道、任务拆分通道、任务结果统计通道、通知客户端通道
规约层:
广电规约、国网规约、武汉规约.......

一、 执行机
l 两个相互独立的执行机:
² JForeMachine:
程序控制机,主要作用是控制整个程序的收发数据帧的过程
在该执行机下面跑的线程有
1. 接收管理线程,用于接收从前置机得到的数据帧
receive_control;
2. 存储管理线程,用于保存相关数据
store_control;
3. 发送管理线程,用于发送数据
send_control;
4. 命令管理线程,用于打包和解析数据帧数据
command_control;
5. 通讯超时控制线程
overtime_control;
² JTaskMachine:
程序的命令任务机,主要作用是拆分客户端的命令任务,在任务完成之后统计任务的执行情况
6. 任务拆分线程,用于拆分一级XML命令,根据不同的规约生成二级XML命令
m_TaskDecodeControl;
7. 任务统计线程,统计一级XML命令的任务执行情况
m_TaskEncodeControl;

二、 通讯通道
l 两个通讯通道
² 串口通讯通道
通过串口与设备进行连接通讯。
² TCPIP通道
通过以太网或者GPRS等通讯介质与设备进行TCPIP连接
l 通讯通道设置
通过读预配置文件得到通讯通道的配置信息,串口通道的属性包括COM号、波特率、校验位,停止位。TCPIP的通道包括IP地址、端口号,两种通道都有一个启动标志位,当启动标志位为true时表示启动该通讯通道进行通讯。大后台主站程序与设备之间可以通过串口直接连接或者通过前置机建立TCPIP连接。主站程序与客户端后台则通过TCPIP连接,两边分别以本身做服务端建立两个固定通道。主站向客户端通知执行情况和告警信息,客户端向主站通知命令下发信息。

三、 数据通讯流程

整个数据通讯的流程如下所示:

发送流程:

1客户端执行操作,客户端后台根据操作内容向XMLCommand中插入XML语句,此为一级XML语句,各种规约的一级XML语句格式相同

2TaskDecodeControl线程检查到XMLCommand中有新纪录插入,则将其拆分为二级任务,置状态位为2,将二级XML语句插入subXMLCommand表中,不同规约拆分出来的二级命令根据各种规约自己定义的格式组成,可以不同。

3Comandcontrol线程检查到subXMLCommand中有新纪录插入,根据不同规约选择不同的类来处理,再根据操作对象类型MEASURETYPE的不同和操作类型OPERATETYPE的不同分析xml语句,根据规约规定的格式打包成数据帧,存放到通讯报文封装类中

4Sendcontrol线程检查到有新的通讯报文封装类的对象,就取出数据帧发送

接收流程:

1:类JCommMessageManage的对象receivemessage_mangae是接收到数据的载体,在JForeMachine中实例化

receivemessage_mangae之后分别传入前置机通道管理线程和前置机接收管理线程,SockThread线程在接

收到数据之后存放在前置机通道管理线程的receivemessage_mangae中的属性Vector<JCommMessage>,

即将收到的数据存放在一个新的JCommMessage对象中,新增到Vector<JCommMessage>对象中。

2:前置机接收管理线程JReceiveControl在检测到receivemessage_mangae中有新的JCommMessage增加后即将新的JCommMessage分析与检查,得到这帧数据的终端地址,新建该以终端地址为标识的JTerminal对象,将JCommMessage保存进去,并且判断是不是所发数据的应答帧。

3:处理存储线程JStoreControl不停的对各个JTerminal对象进行检测,看是否有新增的JCommMessage,有的话就将JCommMessage中的数据提取出来,判断它的规约类型,根据规约类型调用Analay方法对数据进行详细的解析。

4:Analay方法将数据解析之后根据规约和数据类型的不同返回一个数据存储对象,调用该对象的save方法对数据进行存储。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: