APP下载

一种基于JMS的实时推送技术

2015-02-27张令芬

电子设计工程 2015年23期
关键词:公交站浏览器消息

张令芬

(河海大学 商学院,江苏 南京 211000)

一种基于JMS的实时推送技术

张令芬

(河海大学 商学院,江苏 南京 211000)

当今互联网盛行的背景下,一些系统软件对获取实时性数据的要求越来越高,服务器推送技术越来越受到人们的关注,虽有对推送技术的研究变得更具有实用价值和意义。由于出现了基于web的服务器反向推送技术,这也是本文的创新之处所在,本文在传统研究的基础之上,提出了一种基于消息总线的实时推送技术,该技术采用JMS消息服务、结合DWR框架来实现模块间信息的实时传递,在文中首先是提出方案,并研究通过对不同模块之间的程序进行设计,最后模拟,最终通过本文对JMS的实时推送技术实现各模块间的实时数据传送,同时本文研究的技术主要是为高性能的Web应用和开发来服务的,对于传统的Web界面也适用。

JMS;实时推送;消息中间件;数据传送;服务器

在当今的互联网时代之下,传统的Web应用模型主要包含了浏览器、服务器和数据库这3层典型的架构模型。其中这3种架构负责的功能各有不同,浏览器的主要负责提出发送请求、进而对发送的请求进行解析,最后用服务器来回复消息并在消息的接收方显示。当然传统的Web应用虽然功能很多,但仍然避免不了存在致命的缺陷,就是Web系统根本无法满足传统桌面系统的需求。现实生活中的应用中,服务器的主要工作就是需要向客户端发送消息或信息[1]。由于服务器作为系统的主要资源,所以可以在任何时刻获得因系统发生变化的第一手资料。所以由于客户端和服务器之间的持久链接使得该系统很方便的实现了服务器的推送,并且进而实现双向数据的传递。对于以HTTP协议为基础的Web系统而言,它只是一种单向的协议,对于HTTP协议是以无状态基础,使得该协议无法顺利实现主动由服务器向浏览器发送数据。客户端只能向服务器发送请求获取数据,但是这样又无法保证客户端获取的信息是实时的[2]。

为了解决上述问题,产生了服务器推送技术。它的基本思想是建立在由浏览器的主动查询转变为由服务器发送信息。也就是由服务器发送数据经过浏览器的显示之后,再将其与服务器连接,之后再继续循环这种操作,从而可以实现服务器的推送技术。

1 服务器推送技术概述

我们国家当前把服务器推送技术可分为两大类:第一种是建立在无插件的服务器及第二种浏览器插件的服务器推。对于第一种的服务器推送技术,由于没有插件,所以无需在浏览器端安装插件,最具有代表性的有Pushlet,DWR等[3]。而对于客户端浏览器则需要安装插件,它的工作主要流程就是通过套接字保持与服务器的连接,从而实现数据推送,这类需要安装插件的代表主要有JavaApplet。

Pushlet框架采用JSP技术,在服务器端采用Servlet技

术,编写一个数据推送类,通过HTTP流连接,将服务器产生的事件对象“推”到客户端浏览器,然后客户端将事件更新到动态网页上,而不需要重载整个页面。Pushlet技术还存在3个方面的不完善之处,主要表现在:1)对于跨浏览器的适用于动态网页的JavaScript类库目前还没有推出。2)用户的数量连接受到了限制。3)Push服务器通常服务的时间受到一定的限制,因此对于规模比较大的应用,服务器运行的性能可能会受到明显的影响。

DWR作为一个引擎,它的主要功能就是通过服务器端的Java对象传送给JavaScript代码使用。DWR也允许服务端Java代码直接操作页面DOM元素,对页面进行局部更新。DWR的服务器推送技术也称为反响Ajax技术,该技术有3种:轮询、Comet、PiggyBacking[4]。

Comet是一种推动方式的工具,主要是建立在HTTP长连接的服务器的基础之上的。客户端向服务器发送求情后,服务器将数据通过 response发送给客户端,但并不会将此response关闭,而是一直通过response的方式,将收到的最新的数据发送给客户端浏览器,最终客户端浏览器得到关闭。

Pushlet和DWR都是无插件服务器推送框架,主要实现是基于HTTP长连接的方式。Pushlet和DWR这两种框架的有相同之处,就是通过利用JavaScript、Ajax技术对服务器和客户端浏览器的通信进行了封装,从而使得页面程序的开发难度得到了降低。但是,这也会因自身任务过程,使得其性能大幅度下降[5]。本文的研究则主要是在结合DWR和JMS消息服务的基础之上,实现了一种基于JMS的实时推送技术。该技术目前已经应用于LED公交站显示屏智能控制系统,本来将基于该系统来介绍这一实时推送技术。

2 技术方案

2.1 系统架构

系统采用B/S架构,使用Spring框架管理实例,使用SpringMVC做请求转发。该系统主要包括了五大模块的内容,它们之间的交互关系如图1所示。

图1 公交站显示屏智能控制系统模块间交互示意图Fig.1 A bus station map display interactive diagram of the intelligent control system module

2.1.1 JMS消息总线

该模块采用ActiveMQ框架实现,实现各独立模块间的数据通信。ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现。ActiveMQ可以提供一些总线的服务,就如订阅/发布模式的消息,其中主要有3种角色,分别为:消息发布者 (MessagePublisher)、消息主题 (Topic)、消息订阅者(MessageConsumer)。一个消息主题可以有多个订阅者,消息订阅者会监听该消息主题,当消息发布者向该消息主题发送信息时,所有的消息订阅者均会收到该信息[6]。

2.1.2 串口通信模块

该模块主要用来与段控制箱进行交互,可实时接收段控制箱发送的数据,也可通过无线信号往段控制箱发送控制命令。

该模块中包含了一个消息发布者,可以将接收到的状态数据通过ActiveMQ中的状态信息主题发布状态数据消息,消息推送模块作为状态信息主题的订阅者,会收到该数据消息。

该模块中还包含一个消息订阅者,监听控制信息主题,当控制转发器发来控制指令时,将控制指令传递给段控制箱,从而实现系统远程控制公交站显示屏。

2.1.3 数据处理模块

该模块主要负责处理公交站显示屏状态数据、构造控制指令等任务。该模块内还涉及到JCS缓存技术。对公交站显示屏的状态信息进行缓存,可以将接收到的状态信息与缓存中的状态信息进行比对,找到发生改变的数据,从而不需要使用数据库来存储公交站显示屏状态信息,提高了计算和处理速度。

2.1.4 消息推送模块

该模块采用DWR服务器推送技术。在Java代码中可以实时向JSP页面发送数据信息。

2.1.5 控制转发模块

控制转发模块的主要功能的实现主要由SpringMVC中的Controller来负责,主要负责接收前台JSP发送的控制请求,并转发给段控制箱。

2.2 系统详细设计

2.2.1 JMS消息总线

该系统内部包含了两个消息主题,分别是状态信息主题和控制信息主题,分别用来传递公交站显示屏状态信息和公交站显示屏控制指令。

系统中有一个JMSFactory类,可以为其他模块提供创建消息发布者和消息订阅者的服务。ActiveMQ启动后,会开启一个端口号为 61616的 tcp连 接:tcp://localhost:61616, JMSFactory通过该地址创建一个ActiveMQConnectionFactory用来创建连接实例。

在JMSFactory类中封装了两个方法,getMessageConsumer ()和getMessageProducer(),分别可以获得一个消息订阅者实例和消息发布者实例。这两个方法可以接收一个字符串参数,该参数指定了消息发布者要向哪个主题发布信息,消息订阅者要监听哪个主题。

MessageProducer类主要负责向消息主题发送消息,该类的实例有一个 send方法,可以发送包含实际消息内容的Message实例。

MessageConsumer类主要负责监听消息主题,为该类的实例设置一个MessageListener,可以实现监听器模式,一旦消息发布者发布了消息,消息订阅者可以通过MessageListener监听到消息,并及时做出反映。

其他模块只需要包含一个设置了 MessageListener的MessageConsumer或者包含一个MessageProducer,这样与JMS消息总线的交互的功能就可以实现。

2.2.2 消息推送模块

本系统中设计了一个LCS类,该类负责向JSP界面实时推送公交站显示屏的状态数据。Spring可以和DWR结合一起主要,这种装配的实现只要对spring的配置进行文件配置,就可以注解地方式实现DWR的服务。这样,在LCS类声明时,添加一个RemoteProxy(name="LCS")即可[7]。

该模块需要监听状态消息主题,接收由串口通信模块发送过来的状态信息。通过LCS类实现MessageListener的接口的同时,还可以定义一个MessageConsumer实例,即可实现状态信息的监听。LCS类还实现了Observer接口。该模块采用观察者模式,在onMessage方法中,每接收到一次状态信息,都会创建一个DataProcessor线程,有关这个线程的实例还继承了 Observable类, 设置其观察 者为 LCS类的实 例。DataProcessor用来解析和处理状态信息,这部分将在数据处理模块详细介绍。DataProcessor处理完成后通知LCS类的实例,LCS将返回的结果通过pushData直接推送到JSP界面进行处理并显示。信息推送过程如图2所示。

图2 消息推送过程时序图Fig.2 Message push process timing diagram

2.2.3 控制转发模块

SpringMVC框架中Controller可以接收JSP发送的请求,并进行处理和转发。该系统中LCSController实现这一功能。在LCSController中,定义了一个ControlInfoService,该类实现了消息发布者的功能,可以向控制消息主题发送控制指令。LCSController在接收到JSP的控制请求后,经过简单的判断后,调用数据处理模块的控制指令构造方法获得具体的控制命令字符串,然后通过ControlInfoService的实例发送到控制消息主题。

2.2.4 数据处理模块

该模块中负责数据处理的核心类为DataCenter。该类负责解析公交站显示屏状态信息、构造控制指令字符串、与缓存数据比对、更新缓存数据、格式化缓存数据等功能。串口通讯模块接收的状态信息是经过压缩的,decodeStatusInfo方法可以解析状态信息,并将状态信息封装成系统需要的数据格式,从而可以跟JCS缓存中的现有数据进行比对。在数据比对过程中,会将发生改变的数据提取出来,并进一步封装成适合前台处理的json数据格式,同时更新缓存数据。如果在比对过程中发现有缓存中不存在的数据,则需要将数据添加到缓存中。则消息推送模块与数据处理模块类图如图3所示。

图3 消息推送模块与数据处理模块类图Fig.3 Message push module and data processing module class diagram

2.2.5 系统界面

系统界面使用DIV和CSS做UI设计和现实,使用Ajax技术与控制转发器进行交互。在与消息推送模块进行交互时,直接调用LCS中的初始化页面的方法,从数据处理模块获取缓存数据,解析并构造页面内公交站显示屏信息的显示。消息推送模块将更新的数据推送到JSP页面,由JS脚本解析数据并更新界面显示。

3 结论

本文提出的基于JMS的实时推送技术,在公交站显示屏智能控制系统中得到了成功的应用。DWR框架实现了由服务器向浏览器推送消息的功能,ActiveMQ框架实现了各模块间的实时数据传送。由于公交站显示屏智能控制系统的使用用户数量有限,因此在实际使用过程中,DWR并没有暴露太多性能方面的缺陷。但是,也不可否认其在性能方面的缺陷。本文研究推出的技术主要是为数据实时性要求较高的Web应用和开发来服务的,当然也可用于实时推送技术的系统之中去。

[1]孙清国,朱玮,刘华军,等.Web应用中的服务器推送技术研究综述[J].计算机系统应用,2008,11:116-120.

[2]张城.基于Web模式的推技术框架研究与应用[D].长沙:中南大学,2010.

[3]晏勇智.基于HTTP长连接的服务器推送技术研究[D].长沙:湖南大学,2010.

[4]郑强.web服务器推送技术的设计与实现[D].北京:北京邮电大学,2013.

[5]李小智.基于消息中间件的服务器推送技术的应用研究[D].长沙:湖南大学,2010.

[6]汪红兵,佘春东,范植华,等.基于JMS的数据推送系统的设计与实现[J].计算机应用,2005(S1):366-368.

[7]薛真真.基于服务器推送和事件流处理技术的实时Web系统研究[D].杭州:浙江大学,2008.

A real-time information push technique based on Java message service

ZHANG Ling-fen
(Business School,Hohai University,Nanjing 211000,China)

Under the background of todayˊs Internet prevailed,some system software for real-time data acquisition have become increasingly demanding,server push more and more peopleˊs attention,although the study of push technology becomes more practical value and significance.Due to the emergence of web-based server reverse push technology,which is the innovation of this paper,on the basis of the above traditional research,we propose a real-time push technology-based message bus, the technology uses a JMS message service,combined DWR framework to achieve real-time transmission of information between modules in the paper first is a proposal,and the study design,the final simulation program between the different modules,the ultimate real-time data between modules by this paper,the real-time push technology JMS transmission,while this research technique mainly for high-performance Web applications and development to serve,for the traditional Web interface is also applicable.

JMS;real-time push;message-oriented middleware;data transfer;server

TN31

:A

:1674-6236(2015)23-0060-03

2015-03-11稿件编号:201503154

张令芬(1986—),女,山东滕州人,硕士研究生。研究方向:财务管理。

猜你喜欢

公交站浏览器消息
长沙“智能公交站牌”上线
一张图看5G消息
反浏览器指纹追踪
上海“最美公交站”迎来浪漫樱花季
大笨狗酷比多
——没有车的公交站
夜归
环球浏览器
消息
消息
消息