APP下载

无刷新Web远程过程调用技术综述*

2012-05-26杨华千蒲昌玖

关键词:序列化服务器端调用

胡 飞,杨华千,彭 涛,蒲昌玖

(重庆教育学院网络中心,重庆 400067)

在庞大的互联网上服务器平台和应用越来越多,如何让异构的服务器平台连接为一个整体?在十年前还是一个遥不可及的技术。近年来Web远程过程调用技术的迅猛发展,从最初简单的Iframe嵌入式页面到后来的Web Service,已经解决了此问题。异构服务器之间只需要通过基于HTTP协议的应用即可相互调用方法和内容。Web Service是这方面的技术龙头,但是其使用复杂、对编程能力要求高、需要刷新整个页面从而浪费带宽和服务器资源等缺点,由此提出了一种在不刷新页面的前提下,对远程方法进行调用,且对编程能力要求不高的技术:Web远程过程调用(以下简称WebRPC)。在一些场合下,甚至成为不可替代的实现方式。WebRPC的实现方式经历了从普通URL读取,隐藏帧,IFrame,XMLHTTP乃至Flash等。

1 无刷新技术的优势

以前传统的远程调用技术会带来页面刷新问题,页面刷新的时候会重新向服务器提交请求,服务器经过运算后返回运算结果,客户端得到运算结果并重新绘制整个页面。如图1所示,在此过程中会带来以下问题:首先,用户提交请求只是改变页面上某个区域的数据,而客户端服务器却会向远程服务器递交整个页面的刷新请求,这样在远程服务器上就会对整个页面的所有数据进行运算;其次,远程服务器返回客户端服务器以及客户端服务器返回用户的数据是整个页面,这样会暂用大量互联网带宽;最后,还要耗费客户端资源来重绘页面。

图2是无刷新技术,该技术只需要在远程服务器上运算需要改变的那段数据,在互联网上传输改变的数据,客户端上也只绘制改变的内容,这样对服务器,对互联网和对客户端而言都节约了大量资源,并且由于改变的数据只是页面上一小部分,所以对各方面而言运算出错的几率也大大降低。图2和图1最大的不同出现在步骤2、步骤3和步骤4。

图1 传统远程过程调用技术

图2 无刷新远程过程调用技术

2 无刷新Web远程过程调用技术(WebRPC)

WebRPC的实现方式经历了从普通URL读取,隐藏帧,IFrame,XMLHTTP乃至 Flash等,技术发展也越来越成熟。下面对几种WebRPC技术分别作介绍,比较它们之间的优缺点[1]。

2.1 MSRS(Microsoft Remote Scripting)[2] & JSRS(Javascript Remote Scripting)[3]

MSRS通过一个applet类以及页面上的参数配置与服务器端交互,从而实现了远程调用。采用此项技术实际上将页面不刷新的工作交给了一个名为rsproxy.class的不可见Applet完成。此方法的优点:轻而易举跨浏览器,缺点:由于服务器端采用微软asp导致applet加载缓慢。此方法不支持数据类型序列化/反序列化,同时支持异步/同步方式。

JSRS是一种基于Javascript技术的无刷新远程内容调用技术,等同于目前的AJAX技术。支持两种远程调用方式:HTTP GET方式(动态加载JS文件),HTTP POST方式(用JS动态创建一个Iframe,在其中提交一个表单),支持简单数据的序列化/反序列化。图3来自BlueShoes网站[3],浏览器和Web服务器之间通过Javascript脚本发生交互,在Web应用程序验证数据有效性的时候,浏览器端用户可以继续填写页面中其他文本表单。浏览器端开发人员可以创建无缝,交互式Web应用程序来调用Web服务器的后台数据。

图3 JSRS运行原理

图4 DWR运行原理

2.2 XML-RPC[4] & DWR(Direct Web Remoting)[5]

XML-RPC用XML语言对数据进行编码,编码后的数据通过HTTP协议来供远程客户端调用。它定义了一种协议规范,由于它的轻量级、概念完整,因此目前绝大多数语言都有实现,包括Java(Apache xml-rpc),PHP,javascript,VBScript,python等等。最大的交流方式Blog协议,管理方法也遵循XML-RPC规范。优点:绝大多数语言都支持,并且此语言简单规范。缺点:Java实现对数据类型序列化支持有限。

采用xmlhttp传递请求,服务器端利用反射找到相应方法执行后将结果返回。较有创意的是将服务器端需要进行远程调用的代码动态转换为相应的js代码,前端可以直接显式调用。可以作为WebRPC学习入门。不支持数据序列化。图4来自DWR网站[6],Javascript函数eventHandler()是客户端浏览器的一个访问事件,它调用getOptions()方法,就好像AjaxService是一个Javascript对象一样。开发人员可以让DWR来完成客户端和服务器端之间的数据通信。

2.3 JSON-RPC[7] & Burlap[8] & XINS(XML Interface for Network Services)[9]

与XML-RPC类似,JSON-RPC也是一个轻量级远程调用协议。在此协议之上进行数据调用,采用xmlhttp发送/接受请求,支持完整的数据序列化/反序列。目前,jason Web框架采用json-rpc为底层方式。jabsorb(Java to JavaScript Object Request Broker)作为一个轻量级的Ajax/Web 2.0框架,使用JSON-RPC协议作为数据传输机制的,通过JavaScript来调用远程服务器上的Java Web应用程序。在远程服务器端封装或者未封装的对象和客户端之间的来回数据通信都可以通过jabsorb进行处理。JSON完全使用了JavaScript自己的特性完成了数据的解析,在获取远程服务器上数据的时候无需刷新整个Web页面,通过JSON读取远程服务器数据并在页面局部区域呈现出来。

Burlap是一个轻量级的机遇XML语言的协议,多用在移动设备Java应用上,用于连接远程Resin服务器,支持数据序列化。通过Burlap提供的API发起数据请求,然后基于XML-RPC协议将请求信息转化为符合协议的XML格式,转化为流进行传输,客户端浏览器接收到序列化的流数据后再根据XML-RPC协议进行还原,返回结果写入XML中,由Burlap返回至调用端。

XINS是一个开源的Web服务框架,支持REST、SOAP、XML-RPC、JSON、JSON-RPC等HTTP协议。它由两部分构成,一个是基于XML语言的文档描述格式,另一个是基于Java语言的应用程序框架。图5来自XINS官方网站[9],各种函数、类型等都由XML书写,XML和XINS结合生成客户端API(.jar)、java服务器代码模板(.war)、WSDL文档描述或者其他开放文档格式。

图5 XINS工作原理

图6 WEBParts构成一个完整页面

2.4 WebService behavior[10] & Web JS

远程服务器上基于SOAP协议的Web服务常规下要通过编程来引用,而WebService behavior允许客户端通过Javascript脚本来调用。这种客户端脚本调用方式为程序员带来了很大方便,程序员不需要去了解SOAP协议复杂的实现机制。这种方式通过一个HTML控件(HTC)文件来实现,可用于IE5或以上版本的浏览器。除了微软有一个Webservice.htc控件,mozilla也有相应的Webservice访问方式。因此,在HTML中访问Webservice也是可行的。WebService behavior采用XML形式在客户端和服务器端传输数据,虽然这种数据传输方式的实时性比基于TCP/IP的Socket技术要弱,但其方便、简单、开放的实现方式使其有着较强的竞争优势。

作为无刷新远程内容调用技术的后起之秀,Web JS实现起来更为方便,且首次引入了WebPart的概念。本技术把网页页面看做是由多个小区域构成,这些小区域称之为WebPart。如图6所示,每个红色矩形框起来的区域就是一个WebPart,每个WebPart的内容都是调用远程服务器上的内容,多个WebPart一起构成一个完整的页面,如果需要对页面中的某个数据进行更改,只需要更改该WebPart对应的远程服务器上的内容即可,本技术支持序列化。

3 结束语

无刷新Web远程过程调用技术是目前的研究热点,其最大的优点,可以在不刷新页面的情况下调用服务端的数据。这种技术使用简单,即使是缺乏专业编程技术的网站管理员也可以很方便的调用远程服务器上的数据,实现本地网站动态内容加载的功能。在此对本研究领域的集中常见技术进行了对比,有利于研究者对本研究领域全面的了解,方便进行更深入的研究。

[1]WEB(Javascript)远程调用方案清单.mechiland的专栏[EB/OL].http:∥blog.csdn.net/mechiland/archive/2005/02/28/305740.aspx,[2005-02-08]

[2]MSRS.微软官方网站[EB/OL].2005-07.http:∥msdn.microsoft.com/library/default.asp?url=/library/en-us/rmscpt/Html/rmscpt1.asp,2005-07

[3]JSRS.BlueShoes官方网站[EB/OL].http:∥www.blueshoes.org/en/javascript/jsrs/

[4]SURU D,PIERRE W,MITRA W.Utilizing XML-RPC or SOAP on an Embedded System[M].Proceedings of the 24th International Conference on Distributed Computing Systems Workshops-W7:EC(ICDCSW'04).Mar.2004

[5]SAMI S.DWR Java AJAX Applications[M].Packt Publishing,2008

[6]DWR官方网站.http:∥directwebremoting.org/dwr/overview/dwr/

[7]王魁生,王晓波.利用JSON进行网站客户端与服务器数据交互[J].软件导刊,2010(3):147-149

[8]Burlap.Caucho Technology,Inc[EB/OL].http:∥www.caucho.com/resin-3.1/doc/burlap.xtp

[9]XINS.XINS官方网站[EB/OL].http:∥xins.sourceforge.net/index.html

[10]杨启亮,崇大平,刑建春,等.WebService Behavior技术及其应用研究[J].计算机应用与软件,2008(2):146-149

猜你喜欢

序列化服务器端调用
Linux环境下基于Socket的数据传输软件设计
如何建构序列化阅读教学
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
浅析异步通信层的架构在ASP.NET 程序中的应用
基于Qt的安全即时通讯软件服务器端设计
基于系统调用的恶意软件检测技术研究
Java反序列化漏洞探析及其修复方法研究
Java 反序列化漏洞研究
作文训练微格化、序列化初探