响应客户端的请求获取并返回实时数据的方法和设备的制作方法

xiaoxiao2020-7-23  5

专利名称:响应客户端的请求获取并返回实时数据的方法和设备的制作方法
技术领域
本发明涉及一种实时数据提供方法、实时数据提供服务器和实时数据提供网络。 本发明的应用很广泛,例如(但并不限于)应用在安全监控,环境监测,应用在海关,机场, 质量检验,环境保护等等多种领域。
背景技术
在需要获取实时数据的常规Web应用中,一般遵循以下几个步骤
由于Http协议的短链接特性,Web客户端需要在页面中设置定时器;
由定时器定时地触发一个数据请求;
服务器端则需要去到数据库中查询,查找最新的一条记录返回给Web客户端。
Web客户端显示数据给用户;
可以理解的是在这种常规的Web实时数据请求和响应过程,数据库负载很大,因为用户的每次请求,服务器都要去查询一遍数据库,当数据量比较大时,数据库的负载将更加明显地增大,在涉及服务器进行多个表联合查询时尤其如此;这样就会在整个web客户端和服务器系统中对来自web客户端的请求的响应造成相当大的延迟,不利于大量客户端的并发访问,并且让用户感觉服务器做出响应很慢。
另外,在最接近的现有技术中,是通过刷新数据库内容来获取数据的,并且自己编写程序来核对过滤规则,这样的系统效率比较差,而且系统本身与业务逻辑耦合度太高,系统重用性差。发明内容
为了克服上述现有技术的缺陷,本发明提供一种用于能够提高对Web客户端的实时数据的请求的响应的方法,实时数据提供服务器和实时数据提供网络。
本发明提供了一种实时数据提供网络,它结合了目前广泛使用的Ajax方式请求实时数据,也就是采用XML数据包的方式,而不是采用传统的以http协议做出响应(response)的方式来请求实时数据。这里所提到的Ajax全称为“Asynchronous JavaScript and XML”(异步Javakript和XML),是指一种创建交互式网页应用的网页开发技术,可以在http://baike.baidu. com/view/1641. htm得到关于该技术更多的信息。
本发明采用了数据缓存机制,采用了规则引擎来对设备数据进行过滤,减少检索空间,从而将业务逻辑与程序的耦合度大大降低了,提高了检索响应速度。在本发明中,整个实时数据的请求过程都没有进行数据库的查询,而且在实时数据提供器当中只保留每个数据的最新的一条数据,从而提高了检索响应速度,节省了服务器的运算资源。
在本发明的第一个方面,提供了一种实时数据提供服务器,包括
数据接收处理模块,用于把来自设备的实时数据转换成设备数据对象;
规则引擎,用于根据规则对所接收的设备数据对象进行规则匹配,如果匹配成功, 则把设备数据对象转换成客户端数据对象;以及
实时数据提供器,用于响应于客户端对实时数据的请求,根据所述客户端数据对象提供所请求的实时数据。
优选地,所述实时数据提供服务器还包括实时数据缓存模块,用于缓存规则引擎所提供的客户端数据对象,并根据所述对实时数据的请求,返回所请求的客户端数据对象。
优选地,所述实时数据缓存模块在客户端数据对象与设备编号之间建立哈希表, 并且根据所述请求中的设备编号检索客户端数据对象。
优选地,所述实时数据缓存模块位于实时数据提供器和规则引擎之间。
优选地,所述实时数据缓存模块被包括在实时数据提供器中。
优选地,所述实时数据缓存模块被包括在实时数据提供器中。
优选地,所述规则引擎向数据接收处理模块提供报警信息。
优选地,所述规则被包括在规则文件中。
优选地,所述规则能够被修改。
优选地,所述客户端数据对象包括设备数据对象和报警信息。
优选地,所述客户端数据对象和设备数据对象是Java对象。
优选地,所述实时数据采用JSON格式提供所请求的数据。
优选地,所述客户端对实时数据的请求采用Ajax方式。
优选地,所述实时数据提供服务器还包括数据采集器,用于从设备采集数据,并把所采集的数据传送给所述数据接收处理模块。
优选地,所述实时数据提供服务器还包括数据库,用于存储数据接收处理模块接收的实时数据和/或报警信息。
优选地,所述数据库用于存储包含所述规则的规则文件。
在本发明的第二个方面,提供了一种实时数据提供网络,包括
一个或者多个客户端;
一个或者多个设备;和
如上所述的任何一种实时数据提供服务器;
其中,所述客户端与所述服务器相耦合;
其中所述设备与所述服务器相耦合。
优选地,所述网络还包括一个或者多个数据采集器,每个采集器与一个或者多个设备相耦合,用于把从设备所采集的实时数据提供给所述服务器。
优选地,所述网络还包括一个数据采集器,所述采集器与一个或者多个设备相耦合,所述采集器被集成到所述实时数据提供服务器,用于把从设备所采集的实时数据提供给所述实时数据提供服务器中的数据接收处理模块。
优选地,所述网络还包括数据库,用于存储数据接收处理模块接收的实时数据和/ 或报警信息。
优选地,其中所述数据库被集成在所述实时数据提供服务器中。
在本发明的第三个方面,提供了一种实时数据提供方法,包括步骤
从设备接收设备的实时数据;
把该实时数据转换成设备数据对象;
根据规则对该设备数据对象进行规则匹配;
如果匹配成功,则把该设备数据对象转换成客户端数据对象;和
响应于客户端对实时数据的请求,根据所述客户端数据对象提供所请求的实时数据。
优选地,所述方法还包括缓存所述客户端数据对象,并根据所述对实时数据的请求,返回所请求的客户端数据对象。
优选地,所述缓存所述客户端数据对象还包括在客户端数据对象与设备编号之间建立哈希表,并且根据所述请求中的设备编号检索客户端数据对象。
优选地,所述规则被包括在规则文件中。
优选地,所述规则能够被修改。
优选地,所述客户端数据对象包括设备数据对象和报警信息。
优选地,所述客户端数据对象和设备数据对象是Java对象。
优选地,所述实时数据采用JSON格式。
优选地,所述客户端对实时数据的请求采用Ajax方式。
优选地,所述从设备接收设备的实时数据还包括通过数据采集器从设备采集实时数据。
优选地,所述方法还包括把实时数据存储在数据库中。
优选地,所述方法还包括包含所述规则的规则文件存储在数据库中。


结合附图,参考下面的详细说明将会使对本发明的理解更完全以及本发明带来的多个优点更加清楚了,其中
图1所示为本发明的配置文件的示意图。
图2所示为本发明的设备数据XML格式的示意图。
图3所示为本发明的实时数据提供网络的示意图。
图4所示为本发明的实时数据提供器的哈希表模块中所存储的哈希表的示图。
具体实施方式
图3所示为本发明的实时数据提供网络的示意图。
在该实施例中,该实时数据提供网络可以包括一个或者多个客户端、实时数据提供web应用服务器、数据库、一个或者多个数据采集器和一个或者多个现场设备。
其中,该现场设备提供实时数据。在本发明中,实时数据所表示的意思是从设备所采集的最新的数据,即设备目前的工作数据。应当注意的是,这里的实时并不一定表示是当前时间的数据。例如,有的设备每五分钟产生一条数据,所以5分钟以内的数据都是该条数据,而不是每时每刻都在产生数据。具体时间依赖所应用的领域和使用的设备。该设备监视现场各关注点的状态。在本发明中,对于现场设备没有限制,只要该设备能够产生数据,所产生的数据都可以被采集。该设备例如是(但不限于)与安全相关的设备,例如RFID门禁,物品机,金属探测门,车底盘照相,环境监测设备,X光车辆扫描设备等等。
数据采集器从该设备采集实时数据,并把该实时数据传送给实时数据提供web应用服务器。
所述实时数据提供web应用服务器接收客户端的请求,选择性地提供所请求的实时数据。
客户端向web应用服务器请求实时数据,并显示所返回的实时数据。
所述实时数据提供web应用服务器,S卩,数据中心服务器,可以包括数据接收处理模块;规则引擎模块;规则定义模块;实时数据缓存模块以及实时数据提供器,在一个实施例中也可以包括数据库,在另一个实施例中也可以包括一个数据采集器。
其中,所述数据接收处理模块用于接收并处理来自数据采集器的实时数据,并输出设备数据对象,而且可以把设备数据和报警信息存入数据库。
数据库保存报警信息和设备数据。在一个实施例中,也可以保存规则文件。
规则定义模块用于对规则进行定义,并且也可以保存所定义的规则。
规则引擎模块用于根据所定义的规则对数据接收处理模块处理后的实时数据进行过滤,即,对从数据接收处理模块传送来的设备数据对象进行规则匹配。规则引擎在系统启动时将设定好的规则及对应于这个规则所要采取的动作都加载到内存当中,而这个规则 (Rule)及动作(Action)可以让用户在运行时灵活修改。
实时数据缓存模块对从规则引擎所传送来的客户端数据对象进行缓存。
实时数据提供器响应于客户端的请求从实时数据缓存模块获取客户端数据对象, 然后按照一定的格式把数据传送给客户端。
以下描述设备的实时数据如何变成客户端数据对象。
数据采集器从一个或者多个现场设备采集实时数据报文,并对实时数据报文进行处理。
在一个实施例中,所述数据采集器可以作为一个计算机服务程序,实施在任何单独的计算机等等上,该计算机连接有一个或者多个需要从其采集数据的现场设备,该同一个数据采集器可以例如借助于所述一个或者多个不同现场设备的驱动程序从所述一个或者多个现场设备采集实时数据。在一个实施例中,实现该数据采集器的计算机可以与图3 所示的web应用服务器是在同一台计算机或者服务器等等上,在该实施例中,数据采集器把从一个或者多个现场设备采集的数据直接传送给web应用服务器的数据接收处理模块。 在一个实施例中,该web应用服务器可以连接多个不同的采集器,每个采集器分别运行在不同的计算机上,该计算机连接有一个或者多个需要从其采集数据的现场设备,在该实施例中,该数据接收处理模块按照一定的策略分别从每个数据采集器接收数据,例如,分时地,按照一定的周期等等。
数据采集器均包括SSDK_0pen,SSDK_Close, SSDK_Read, SSDK_ffrite, SSDK_ GetData, SSDK_PutData这些接口,这些接口是每个数据采集器必须自行实现的接口。
其中的SSDK_0pen接口用于打开设备端口,以供从该设备端口读取该设备所产生的数据;SSDK_Close接口用于关闭设备端口 ;SSDK_Read接口用于在设备端口打开之后,从打开的设备端口读取设备所产生的数据;SSDK_Write接口用于向设备发送指令,例如打开或者关闭这样的指令;SSDK_PutData接口负责将由SSDK_Read接口从打开的设备端口读取的数据写入到共享数据区中;使用SSDK_GetData接口从共享数据区中获取数据。数据采集器然后把所获取的数据转换成XML格式,然后发送到实时数据提供web应用服务器的数据接收处理模块以供处理。在数据采集器被集成在web应用服务器的实施例中,数据采集器把所获取的数据直接传送给数据接收处理模块,而不用转换成XML格式。
每当添加一个新设备时,要从其采集数据的数据采集器都可以继承和重载上述的这些接口,而不用重新开发,节省了系统开发时间。
在运行时,数据采集器首先从配置文件中读取配置信息。配置文件可以采用例如 XML格式,它的一个例子如图1所示。在该配置文件中包含了对设备信息的描述(其中的 Device id表示了要从其采集数据的设备的编号,)以及数据中心服务器krver (Ipaddr” 表示数据中心服务器的IP地址)_即实时数据提供web应用服务器的相关信息。
例如,设备信息可以包括设备id、设备驱动driver、设备数据分隔符 s印erator (描述了数据字符串的分割符号)、设备数据的序列datasequence (描述了数据的序列)。
然后,数据采集器加载相应的驱动程序,并将operator及datasequence信息传递给驱动程序。驱动程序的定义是由配置文件中的driver属性定义的,例如,图1中定义的driver就是RayDevDriver. dll,它例如可以是一个windows动态库。
驱动程序在获取到来源设备的数据后,按照数据采集器传递给它的seperator和 datasequnce来组织数据并放入数据区中,同时通知数据采集器来获取数据。数据采集器在获取到数据后按照s^erator和datasequence对数据进行反解析,即可获取到各个单项数据。然后,数据采集器将各个单项数据组织成XML格式的数据串(如图1所示),并通过 Http协议发送到在配置文件中所指定的数据中心服务器的数据接收处理模块。数据中心服务器的数据接收处理模块为由图1中的URL字段所指定的krvlet。
实时数据提供web应用服务器中的数据接收处理模块对所接收到的设备实时数据进行以下处理
首先,数据接收处理模块例如通过JDK的JAXB OXM映射机制将从数据采集器接收到的XML数据转化为设备数据对象,在这里是一个Java设备数据对象。例如,通过JDK 的 JAXB 将 XML 数据转化为 Java 类。JAXB 是 Java Architecture for XML Binding 的缩写,可以将一个Java对象转变成为XML格式,反之也可以将XML格式的数据转化为Java 对象。我们把对象与关系数据库之间的映射称为0RM((Object Relation Mapping),因此也可以把对象与XML之间的映射称为OXM (Object XML Mapping)。例如,数据接收处理模块接收到了图2所示的设备数据XML,则数据接收处理模块在硬盘上的classes目录下查找UnderPanOOOl. class类;找到该类后,则依据XML中所提供的数据在内存中实例化 UnderPanOOOl.class类,从而产生设备数据对象。这里只是举例说明,还可以用其它的方式产生设备数据对象。
然后,数据接收处理模块将经转化的设备数据对象(例如Java对象)放入到规则引擎模块的工作存储空间(working memory) 0其中,数据接收处理模块可以通过调用规则引擎模块所提供的接口,例如API接口,来将设备数据对象放入到规则引擎模块的工作存储空间。
另外,数据接收处理模块还将设备数据和来自规则引擎模块的报警信息一并存入数据库中,以便于日后查询。当然,也可以不将设备数据和/或报警信息放入数据库中。这取决于具体方案的实施。在图示的实施例中,该数据库与web应用服务器存在于不同的计算机或者服务器上。不过,在一个实施例中,建议数据库与Web服务器集成在一个独立的计算机中,因为数据库作为数据的存储介质,对数据安全性的要求比Web服务器要高,同时计算量也要大很多。
规则引擎模块在从数据接收处理模块接收到设备数据对象后,根据规则文件中所定义的规则通过规则过滤来对该设备数据对象进行规则匹配,从而将该设备对象数据扩展为客户端数据对象。其中,规则文件是保存业务规则的文件,规则引擎会解析规则文件中定义好的过滤规则以对设备数据进行规则匹配,匹配成功后会在设备数据对象中加入报警信息,如果匹配失败,则表示没有符合的规则,此时设备数据对象中不会被插入报警信息。在一个实施例中,简单地说,客户端数据对象=设备数据对象+报警动作代码。其中,规则过滤算法可以采用本领域已知的算法。规则可以是一系列的if else语句,如果满足某个规则,则会认为匹配成功,否则,匹配就不成功。其中,规则引擎在本发明中,可以采用现有的技术,例如采用开放源代码的规则引擎。在本发明中的规则引擎采用了现有的Rete以及 Leaps两种快速规则匹配算法。将来任何合适的更好的快速规则匹配算法也适用于本发明。
规则引擎模块然后将过滤处理后的设备数据对象(也即,匹配成功的设备数据对象)结合报警信息生成客户端数据对象,然后将其提供给实时数据缓存模块。其中,报警信息包括了报警的脚本名称及参数,这样可以可视化地提醒监控人员注意某些设备监控数据的异常,从而尽早的发现异常,例如,报警动作代码。请注意在不存在实时数据缓存模块或者该实时数据缓存模块与实时数据提供器集成在一起的情况下,规则引擎模块将客户端数据对象提供给实时数据提供器。同时,规则引擎模块还将报警信息返回给数据接收处理模块。其中,规则引擎模块根据规则定义对设备数据对象进行规则过滤,并构造出客户端数据对象,然后直接把该客户端数据对象放入到实时数据缓存模块中。规则定义可以放置在一个特定的文件当中,也可以放置到任何类型的数据库中,例如放置在上述的数据库中。规则定义需要在项目发布运行之前定义,任何时候都可以修改规则文件,但是修改后需要重新启动应用服务器。用任何文本编辑工具都可以对规则文件进行修改。
在本发明中,报警代码分前、后台报警代码;前台报警代码是给监控人员看的,这个代码是由系统的前端展示系统和后台的规则引擎使用的,规则引擎使用的是后台的报警动作代码;后台的报警动作代码例如在数据库中记录一条报警记录;前端的报警动作代码例如图标闪烁;
上述的规则文件包括规则引擎过滤用的规则,规则可以采用许多种方式来定义, 例如,在本发明中,可以按照以下方式来定义规则
package ssdk;import com.nuctech.ssdk.runtime.service.DeviceService;import com.nuctech.ssdk.runtime.model·*;import com.nuctech.ssdk.runtime.model.devicedata.*;
权利要求
1.一种用于响应客户端的请求获取并返回实时数据的方法,包括 接收客户端发出的实时数据请求;响应于客户端所发出的实时数据请求,根据该实时数据请求中包含的所请求的实时数据的来源设备的标识向实时数据缓存模块请求客户端数据对象;以及在从实时数据缓存模块得到客户端数据对象后将该客户端数据对象的数据转化为字符串并返回给客户端。
2.根据权利要求1所述的方法,其中,实时数据缓存模块响应于对客户端数据对象的请求,根据该请求中所包含的所请求的实时数据的来源设备的标识在所存储的哈希表中检索所述客户端数据对象。
3.根据权利要求1所述的方法,其中,所述实时数据请求是轮询请求。
4.根据权利要求1所述的方法,其中,在所述实时数据请求中还采用定时器。
5.根据权利要求1或2所述的方法,其中,所述标识是来源设备的编号或对应于该来源设备的字符串。
6.根据权利要求2所述的方法,其中,所述哈希表描述了来源设备与客户端数据对象的一对一关系。
7.一种用于响应客户端的请求获取并返回实时数据的设备,包括 用于接收客户端发出的实时数据请求的装置;用于响应于客户端所发出的实时数据请求而根据该实时数据请求中包含的所请求的实时数据的来源设备的标识向实时数据缓存模块请求客户端数据对象的装置;以及用于在从实时数据缓存模块得到客户端数据对象后将该客户端数据对象的数据转化为字符串并返回给客户端的装置。
全文摘要
本发明涉及用于响应客户端的请求获取并返回实时数据的方法和设备。提供了一种用于响应客户端的请求获取并返回实时数据的方法,包括接收客户端发出的实时数据请求;响应于客户端所发出的实时数据请求,根据该实时数据请求中包含的所请求的实时数据的来源设备的标识向实时数据缓存模块请求客户端数据对象;以及在从实时数据缓存模块得到客户端数据对象后将该客户端数据对象的数据转化为字符串并返回给客户端。
文档编号G06F17/30GK102523309SQ201110462900
公开日2012年6月27日 申请日期2009年7月31日 优先权日2009年7月31日
发明者吉东旭, 崔锦 申请人:同方威视技术股份有限公司

最新回复(0)