基于Java的远程监控系统中数据传送的设计


*基金项目:华南理工大学自然科学基金项目(G04-E5041210),国家自然科学基金项目(70272047), “985 工程” 华南理工大学学科建设苗子项目(306-D76080) 基于 Java 的远程监控系统中数据传送的设计 焦青松 吴应良 (华南理工大学电子商务学院 广州 510006) 摘要:程序在网络上运行,由于网络的连接情况和拥塞情况具有一定的随机性,很多时候会出现网 络抖动的情况,造成客户端程序与服务器端程序短时失去连接,使数据传送中断。本文针对此问题, 从一个具体的分布式远程监控系统出发,分析和设计了在网络短时中断时数据的缓存和重连接的解 决方法。 关键词:分布式系统,远程监控,Java/RMI,重连接 中图分类号:TP273 文献标识码:A Design of Data Transmission in Remote Monitoring System Based on Java Technology Jiao Qingsong Wu Yingliang (E-Business College, South China University of Technology, Guangzhou 510006, China) Abstract:When the programe is running in the network, there is some randomicity of connection and congestion, which makes networks librate easily. For this reason, it causes temporary disconnection between a client programe and a server one, and it makes the data transmission intermited. To solve this problem, a method is presented in this paper, in which data’cache and reconnection are implemented in a distributed remote monitoring system. Key words:Distributed System, Remote monitoring, Java/RMI, reconnection 1 引言 随着互联网络的发展,分布式系统已经成为当前计算机发展的重要方向。传统的集中式系统大 都采用单一主机的形式,在本地完成数据的采集和处理工作,数据的显示和用户监控请求的响应也 放在本地主机执行。这样势必导致本地主机的高负荷运转,从而大大降低了整个系统的效率。采用 分布式的系统结构,可以避免集中式系统的上述缺点,用户可以实现在远程对采集过程进行监视和 控制。 Java 技术的飞速发展为分布式系统的实现提供了良好的基础。Java 语言是一种纯粹的面向对象 的编程语言,可以不加修改地运行于多种平台上面,其良好的可移植性和与平台无关性使得它在分 布式系统的设计中得到广泛的应用。随着分布式技术的发展,SUN 公司提出了基于 Java 语言的 RMI (Remote Method Invocation,远程方法调用)分布技术解决方案。RMI 技术提供了非常灵活的远程 方法调用,客户机可以象调用本地对象的方法一样,用相同语法调用远程服务器中的对象的方法。 但当程序在网络上运行的时候,由于网络的连接情况和拥塞情况具有一定的随机性,很多时候 会出现网络抖动的情况,造成客户端程序与服务器端程序短时失去连接,使数据传送中断。本文从 一个基于 Java 的分布式远程监控系统出发,分析和设计了在网络短时中断时数据的缓存和重连接的 解决方法。 2 基于 Java 和 OPC 技术的分布式远程监控系统 2.1 系统的结构 下面介绍一种基于 Java 和 OPC 技术的分布式远程监控系统,系统的结构模型如图 1 所示。系统 的功能是:实现对生产过程的数据采集和存贮,并在远程客户端实现对采集过程的监测和控制。 系统采用多层 Client/Server 结构。总体上可以分为 3 个层次:数据服务器层、应用服务器层和 客户端。数据服务器负责提供所需的数据,包括系统的实时数据、历史数据和报警信息等;应用服 务器接收客户端发出的请求信息,根据客户端的请求与数据服务器进行交互,实现客户端的请求。 客户端负责数据曲线的显示,并负责处理用户的监控请求。 在分布式应用的实现方面,采用 Java/RMI 技术,远程客户端和应用服务器端之间通过 RMI(远 程方法调用)来实现数据的传送。 系统还采用了 OPC 技术和 Java/JNI 技术,这里不作介绍,本文只讨论客户端和 RMI 服务器之 间的数据传送问题。 2.2 系统中的数据传送问题 本系统采用分布式技术,应用服务器和远程客户端分别位于网络中不同的主机上,采集的数据 用 RMI 技术通过网络从服务器端传送到客户端。 系统中,客户端需要完成两项任务,一是对采集过程的监测和控制,并用波形图把采集的数据 实时地显示在客户端界面上,这就要求数据采集服务器采集的数据实时的传送到客户端,保证监控 的实时性。客户端的另一项任务是,把从服务器端传送过来的数据保存在客户端计算机上,以便用 户能浏览和分析采集到的数据。为保证对数据分析的正确和完整,数据采集服务器采集的数据应全 部传送到客户端,这就要求数据传送的准确性,即数据应无丢失的在网络上进行传送。总之,数据 从服务器端传送到远程客户端时,应满足数据传送的实时性和准确性。 然而,当数据在网络上进行传送时,由于网络的连接情况和拥塞情况具有一定的随机性,很多 时候会出现网络抖动的情况,造成客户端与服务器端失去连接,使数据传送中断。为保证数据传送 的实时性和准确性,需采取措施,当网络连接出现短时断开的时候,客户端和服务器端应能自动重 新建立连接,使实时监控和数据保存继续进行。对于由于网络短时中断时没能传送的数据,应采用 缓存的方法,待连接重新建立后,再把这些数据进行传送。 3 数据传送方案设计 3.1 数据传送方案及数据缓存的实现 如前所述,客户端需要完成两项任务:一是对数据采集进行实时监控,二是把从服务器端传送 过来的数据保存在客户端计算机上。在这两项任务中,实时监控任务要求保证数据的实时性,即服 务器端采集的数据应实时地传送到客户端,让用户及时了解数据采集的情况。而数据保存任务需要 的是数据传送的准确和完整,即采集的数据应无丢失的从服务器端传送到客户端。 考虑到以上两种功能对数据传送的要求,为保证他们都能满足各自的功能,本系统在设计数据 传送时,把实时监控部分和数据保存部分分开,即分别通过不同的途径从服务器端获得数据。 对实时监控部分,采用的方法是:当客户端和服务器建立起连接以后,由客户端主动向服务器 发出请求,每请求一次,就通过远程方法调用(RMI)从服务器端取得一次当前数据,然后把这个 数据用波形显示在客户端界面上,保证监控的实时性。 图 1 基于 Java 和 OPC 技术的分布式远程监控系统 应用服务器 RMI 客户端 应用服务器层 数据采集服务器层 OPC 服务器 采集卡 Java-OPC 接口 RMI 服务器 Java 应用程序 JNI 方法 COM Driver 采集卡 Driver 对数据保存部分,采用在服务器端先用数组缓存数据,缓存数组中的数据达到一定数量后,由 服务器主动一次性把这些数据传送到客户端。具体的方法是:在服务器端,对每一通道的数据先用 两个数组交替进行缓存,数据采集服务器传送过来的数据先放进数组 1,当数据满一定数量后(例 如200个),由数组 2 接着接收数据,与此同时,新开一个线程,把数组 1 中的数据通过远程方法调 用主动传送给客户端。在传送数组 1 时如果网络是中断的,则可利用后面介绍的重连接机制,让客 户和服务器重新建立连接,只要在数组 2 接收 200 个数据的过程中,连接能够重新建立,把数组 1 传送成功,就可以保证数据无丢失的传送。这就是本远程监控系统在网络短时中断时,利用数组对 数据进行缓存的原理所在。数组 2 接收满 200 个 数据后,新开一个线程传送数组 2,同时由数组 1 来接收数据。如此循环。 这种数据传送方式的好处是:一方面客户端的实时监控仍可正常实现,不受数据保存的影响。 另一方面,通过在服务器端设置缓冲数组后,解决了因网络短时中断后服务器端的数据没有传送到 客户端而丢失的问题。例如,通过测试,在本系统中,服务器采集 200 个数据所用的时间大约为 3 秒,那么,假设设置的数组大小为 200 时,则允许网络有 3 秒短时中断而不会导致数据的丢失。 3.2 系统中客户端和 RMI 服务器之间的数据流 本远程监控系统采用上述数据传送方式,图 2 描述了系统中客户端和 RMI 服务器之间的数据流 动情况。从图中可以看出,应用服务器端设有一个缓冲数据区,经过缓冲数据区后,数据分两路到 达客户端,这两路数据分别用于实时监控功能和数据保存功能。具体情况如下: 1)数据采集服务器采集的数据先到达应用服务器的缓冲数据区。缓冲数据区中存放着当前数据, 当新的数据到达的时候,新的数据将覆盖原来的数据成为当前数据。 2)客户端的实时监控模块通过远程方法调用直接从应用服务器的缓冲数据区获得数据,然后用 波形显示出来。 3)在应用服务器上,缓冲数据区的数据依次放进缓存数组。两缓冲数组交替存放数据,当一个 数组的数据满后,新开一个线程把该数组中的数据传送给客户端,与此同时,由另一数组来接收数 据。 3.3 网络短时中断后重连接的实现 由于网络的连接情况和拥塞情况具有一定的随机性,很多时候会出现网络抖动的情况,造成客 户端与服务器端瞬间失去连接。因而,系统应具有一定的容错性,当网络连接出现瞬时断开的时候, 客户端和服务器端应能自动重新建立连接,保证实时监控和数据保存正常进行。 这个功能的实现可利用 Java 技术的异常机制。在 Java 语言中,有很完善的异常处理机制,当网 络连接出现断开的情况时,客户连接器进行远程方法调用的时候就会抛出 RemoteException 异常,我 们可以捕获这个异常,然后进行重连接处理。当首次重连接失败之后,客户连接器休眠一个随机的 时间后再进行连接。自动重连失败超过一定次数之后,应当向用户报告出错的情况。 以下是本远程监控系统中利用异常机制进行重连接的客户端代码的一部分: private int connectTries=0; //累计连接次数 图 2 客户端和 RMI 服务器之间的数据流图 交替 放入 采集的数据 当前数据区 数组 2 数组 1 实时监 监模块 数据保 存模块 数据采集服务器 应用服务器 客户端 private int maxConTries=10; //最大连接次数 public ConnectServer(String rmiurl) { //客户端与 RMI 服务器建立连接的方法 …… try { connect(); } catch(RemoteException ex) { //捕获远程异常进行重连接处理 try { reconnect(); } catch(RemoteException e) {…} } } public int connect() throws RemoteException {…… } //连接方法 public void reconnect() throws RemoteException //重连接方法 { try { connectTries ++; connect(); connectTries = 0; } catch(RemoteException ex) { if(connectTries
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf