单位文秘网 2021-10-14 08:10:54 点击: 次
【摘要】在分布式监控系统中信息传输时,遇到了诸多的困难,其主要的原因是系统数据通信中的数据类型多,信息交互复杂,控制起来也比较繁琐。而引入XML 报文后使得问题变得简单化。
【关键词】信息传输;数据通信;XML报文
1.数据通信
数据通信是通信技术和计算机技术相结合而产生的一种新的通信方式。要在两地间传输信息必须有传输信道,根据传输媒体的不同,有有线数据通信与无线数据通信之分。但它们都是通过传输信道将数据终端与计算机联结起来,而使不同地点的数据终端实现软、硬件和信息资源的共享。在分布式监控系统中,最基本的问题是数据通信问题。下面 我们列举一个比较典型的应用式监控系统服务模型。
图1 应用式监控服务模型
在这该服务模型中,应用与应用之间,应用与服务中心之间会发送数据,大致分以下三种情况:
(1)应用→服务中心
应用采集到的文字信息、图片信息等,应用收到服务中心发出来的数据之后回发,并确认应答信息。
(2)服务中心→应用
服务中心发给应用的基础数据与相应的系统参数、服务中心收到应用发来的数据之后回发,并确认应答信息、服务中心给应用的控制指令等。
(3)应用→应用
有些作业需要两个应用共同完成(如应用A解析文件,应用B替换内容,两个应用要相互交换数据才能生成新的文件),因此应用之间也会发送相关的数据,而这些数据服务中心是不会关心的。
由此可见,在该应用式系统监控模型中会存在多种数据交互,数据发送也是动态的、杂乱的、随机的,种类多,内容不同,格式不同。另外,服务中心通过局域网连网,有固定的IP地址,而应用根据部署的不同,其IP地址可以是不固定的,我们通用Socket通信机制作为系统的数据通道时,把服务中心作为Socket Server,启动侦听,应用作为Socket Client,主动连接Server。应用之间若要相互传送数据,则通过服务中心来转发,增加了服务中心和应用之间收发数据的复杂性。
2.模型的建立
根据XML的特点以及应用式系统监控服务模型的功能要求,将系统的数据通信问题转化为如何实现网络文件传输和如何使用XML文件表示数据这两个子问题。同时,为了便于实现,提高系统的可靠性、稳定性及可维护性,采用相应层次结构,将模型的功能再划分为七层,如图2所示:
(1)物理链路层
是指网络通讯的线路,本系统采用电信的ADSL有线方式,其它也可以是局域网(双绞线、同轴电缆、光纤等)或者无线通讯方式(GPRS、GSM、CDMA等);物理链路层是系统数据通信的基础,但与上层的实现方式基本无关。
(2)标准网络协议层
是指TCP/IP(Transmission Control Protocol/Internet Protocol)协议族,网络中TCP/IP协议叫做传输控制/网际协议,又叫网络通讯协议,是Internet国际互联网络的基础,其中的TCP协议和UDP(User Datagram Protocol)协议是两种最常用的数据通信协议。
(3)文件传输层
使用Socket(套接字)技术实现文件的传输。Socket是Windows與网络的接口。Windows通过Socket把数据格式转换成网络传输格式,也把网络数据格式转换成Windows格式。Socket可以使用面向连接的协议(如TCP),也可以使用无连接的协议(如UDP)。Socket一般用来描述IP地址和端口,是一个通信链接的句柄。应用程序通常通过Socket向网络发出请求或者应答网络请求,可以通过Socket传送数据,进一歨封装成传送任何文件(字节流)的功能。
(4)XML文件控制层
在XML中的数据可能是接收到的数据,也可能是要发送的数据,服务中心和应用必须准确控制XML文件的接收和发送。特别是对于服务中心,可能同时接收到多个应用发送来的XML文件,发送XML文件时也要准确控制发送的目标应用。
(5)XML文件封装/解析层
这是两个相逆的过程,也是两种相对应的操作。XML文件封装是指将要发送的数据按照一定的协议打包组装成一个特定格式的XML文件,解析是指对一个XML文件按照特定的协议进行分析解读,还原出其中所描述的数据。
(6)数据表示层
将采集到的数据、处理中的数据或者在数据库中存储的数据等各种数据格式转换为能够用XML文件描述的格式。这一层在本地操作的数据和远程传输的数据之间建立了一个通道,使两者之间互不影响,从而不会降低系统的执行效率。
(7)业务逻辑层
实际上就是整个系统的用户接口,或者说是系统功能的实现层,包括打印单据、防作弊、报警处理、用户管理、查询统计、费用计算、实时监控、基础数据录入、系统管理等。
3.模型的实现
3.1 网络文件传输
(1)动态链接库
本模型系统使用.NET开发专门用于网络文件传输的动态链接库(DLL),基于对字节流的处理可以传输任何文件,因此对于XML文件的传输来说是透明的。该动态链接库的主要接口及其功能如下:
1)初始化。服务器端要先启动监听,客户端主动联接。
DWORD DT_Net_InitServer(BOOL bIsServer = TRUE);
参数:bIsServer表示是否将此Socket端用作服务
返回:0或者错误代码
2)设置回调函数接口
DWORD DT_Net_SetCallBack(LPVOID pParam,LPNET_ ACCEPT_CALLBACK pAccept,LPNET_RECV_CALLBACK pRevc,LPNET_DISCONN_CALLBACK pDisConnect,LPNET_ LOG_CALLBACK pLogInfo);
包括请求连接、接收到数据、断开连接和日志回调。
3)设置文件操作的回调函数接口
DWORD DT_Net_SetFileCallBack(LPCTSTR pSavePath, LPNET_SENDFILE_CALLBACK pSendFile,LPNET_ RECV FILE_CALLBACK pRecvFile,LPNET_ABORTFILE_ CALL BACK pAbortFile);
包括文件发送完毕、接收到文件、文件发送中断的回调。
4)服务器启动监听
DWORD DT_Net_StartListen(LPCTSTR pszLocalIP, unsigned long nSvrPort);
参数:pszLocalIP-服务器IP地址
nSvrPort-服务器端口号
返回:0或者错误代码
5)服务器停止监听
DWORD DT_Net_StopListen();
6)发送文件
DWORD DT_Net_SendFile(unsigned int nIDSocket, LPCTSTR pstrFileName, LPCTSTR pszReName=NULL);
参数:nIDSocket-Client端套接字句柄
pstrFileName-文件名称(全部路径)
pszReName-文件重命名
7)中止文件发送
DWORD DT_Net_AbortFile(unsigned int nIDSocket);
参数:nIDSocket-Client端套接字句柄
8)断开连接
DWORD DT_Net_DisConnect(unsigned int nIDSocket);
参数:nIDSocket-套接字句柄
9)连接服务器
DWORD DT_Net_ConnectRemote(LPCTSTR pstrRemoteIP, unsigned long nRemotePort);
参数:pstrRemoteIp-服务器IP地址;
nRemotePort-服务器端口号
(2)实现文件传输
将服务中心作为Socket Server,启动监听:
DT_Net_InitServer(TRUE);
DT_Net_StartListen(ServerIP,ServerPort);
然后设置回调函数:
DT_Net_SetCallBack(self,LPNET_ACCEPT_CALLBACK, LPNET_RECV_CALLBACK,LPNET_DISCONN_CALLBACK, LPNET_LOG_CALLBACK);
DT_Net_SetFileCallBack(PChar(‘d:\temps’),LPNET_ SEN DFILE_CALLBACK,LPNET_RECVFILE_CALLBACK,LPNET_ABORTFILE_CALLBACK);
各应用作为Socket Client,也设置回调函数,并主动去连接Server:
DT_Net_InitServer(FALSE);
DT_Net_SetCallBack(self,LPNET_ACCEPT_CALLBACK, LPNET_RECV_CALLBACK,LPNET_DISCONN_CALLBACK, LPNET_LOG_CALLBACK);
DT_Net_SetFileCallBack(PChar(‘c:\tempc’), LPNET_ SEN DFILE_CALLBACK,LPNET_RECVFILE_CALLBACK,LPNET_ABORTFILE_CALLBACK);
DT_Net_ConnectRemote(ServerIP,ServerPort);
每个应用和服务中心之间建立唯一的独立通道,当连接建立成功后,就可以利用该套接字在该应用与服务中心之间收发文件:
DT_Net_SendFile(theSocket,FileName);
3.2 XML文件封装协议
不同的数据最终封装成的XML文件是不同的,但是为了便于处理,把每一个XML文件分成两个主要的部分(Head和Data),如图3所示:
图3 XML结构示意图
1)Head部分
系统中的任何一个XML数据文件都有相同的Head(数据包头),表明该XML文件的优先级(priority)、数据种类(FrameType)、来自何处(FromStationNo,应用编号,如果是服务器则为“0”)以及封装时间(DateTime)。
2)Data部分
这一部分是XML文件所要封装的数据内容,基本按字段格式排列即可。要注意数据类型转换的問题,任何数据都必须想方设法转换成字符串类型的表示形式。
3.3 XML文件控制
在实现了文件传输的基础上,对XML文件的封装、解析、接收和发送等操作使用多线程方式并行处理,并且引入队列(Queue)的机制。服务中心的基本处理机制与流程如图4所示:
图4 监控中心处理线程与流程
文件接收线程接收到XML文件后,先不管文件的具体内容,只负责将文件入队。然后由专门负责从队列中提取文件的线程将文件取出,由处理线程进行解析、处理,并将数据保存至数据库,同时还要生成确认应答的XML文件放入发送队列中。另外有专门负责发送文件的线程将文件发送出去。服务中心要往各应用发送的数据有一个独立的线程负责从数据库中读取相应数据封装成XML文件放入发送队列,等待发送。数据处理线程负责对数据库中的数据做进一步的业务处理,而系统监管线程主要的任务就是监视其它各个线程的状态,及时进行调整、修复或者发出报警,以保证系统正常运行。
应用的处理与服务中心的处理比较相似,但更为简单,因为服务中心面对多个应用,而应用只面对一个服务中心。
要保证监控中西文件处理的速度和系统运行的效率还要考虑以下几个问题:
1)优先级
2)区分文件是哪个应用发送来的或者要发送给哪个应用
3)文件队列的管理
虽然XML文件的<Head>部分有优先级和应用编号信息,但是需要解析XML文件才能得到,为此要把文件名定为“优先级_应用编号_流水号.xml”的格式,可在一定程度上方便处理的过程。另外,文件队列可能存在积压现象,即入队快而出队慢,并且会造成恶性循环使系统性能持续降低,针对这种情况制定一个限度,当队列中的文件数达到此限度,则停止入队,即把新生成的XML文件丢弃。
4.总结
利用上述方法解决了一个应用式系统监控服务模型的数据传输问题,使原本错综复杂地、多种格式数据相互收发控制变得逻辑简单、层次分明、实现方便、安全可靠、稳定高效。经实际应用和测试,该方法是完全可行的,并且效果很好。
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-173-95970-1.html
上一篇:从数据通信角度看万物互联
下一篇:华为重返企业网
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用