首页 > 范文大全 > 正文

互联网运用框架通讯研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇互联网运用框架通讯研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

本文作者:林 国 李伟超 单位:郑州航空工业管理学院

0引言

近年来随着技术的发展,富互联网应用作为一种新的开发概念提出,出现了大量实现富互联网应用的具体技术,包括AJAX技术,AdobeFlex技术,MicrosoftSilverlight技术以及JavaFX技术等。这些技术基本上有如下共同点:使用成熟的HTTP通信模式;基于XML语法和标签语言技术;拥有丰富的桌面端应用集成;免去系统的安装和维护;软件自动升级[1]。AJAX基于构建富互联网的Web应用程序的特性,以及可开发友好的用户界面,良好的交互性和互操作性,使其得到越来越多的人的青睐,是Web2.0的核心技术[2-3]。因此,充分利用AJAX技术,实现良好的编程模型,使开发人员需要将主要精力投入分析、构建业务逻辑的应用上,而非繁杂的代码工程。将相同类型问题的解决途径进行抽象,抽取成一个个应用框架,已成为AJAX技术的热点研究方向。

1AJAX技术概述

AJAX不是1个技术,它更像是1个模式,标志并描述有用的设计技巧的1种方法,AJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术[4-6]。它有机地包含了以下几种技术:①使用XHTML+CSS来表示信息;②使用JavaScript操作DOM(DocumentObjectModel)进行动态显示及交互;③使用XML和XSLT进行数据交换及相关操作;④使用XMLHttpRequest对象与Web服务器进行异步数据交换;⑤使用JavaScript将所有的东西绑定在一起;⑥使用SOAP以XML的格式来传送方法名和方法参数。AJAX核心是JavaScript对象XmlHttpRequest[7]。该对象在InternetExplorer5中首次引入,它是1种支持异步请求的技术。简而言之,XmlHttpRequest使我们可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。如图1所示,AJAX通过JavaScript和XMLHttp-Request对象在浏览器端(用户端)和服务器之间建立1个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像一些数据验证和数据处理等都交给AJAX引擎来处理,只有确定需要从服务器读取新数据时才由AJAX引擎代为向服务器提交请求。

2AJAX框架研究与实现

框架就是一组协同工作的类,它包括了1组抽象概念,这些抽象概念来源于问题需求。框架使得这些抽象概念相互协作,并提供了1种扩展的形式,以实现重用。框架在抽象概念上进行工作,定义抽象概念之间的协作方式。在软件组织中形成以框架为核心的开发方式,在开发中使用框架,并在开发完成后改进框架。在这个反复的过程中,重用的工作就已经开展起来了。框架的设计就是将各组件元素以某些理想的合作模式组织起来,以达成系统的基本功能和限制,其实就是在特定领域基于体系结构的可重用的设计。通过框架进行开发,可以带来下列的好处[8-11]:(1)模块化。框架通过封装多变的实现细节提高了软件的模块化。框架将设计和实现的变化所带来的影响局部化,这有助于理解和维护已有的软件。(2)可复用性。框架提供的固定接口被定义成抽象类的组件,并可被用来创造新的应用程序,这样就提高了可复用性。框架组件的复用能大幅度的提高后继开发人员的效率,同时还能够改善软件的质量、性能和可靠性。(3)可扩展性。框架通过提供显式的方法,允许应用程序来扩展其固定接口,提高框架的扩展性。该方法对框架的固定接口和变化的应用程序行为进行解耦合。

2.1AJAX框架设计目标本文设计的Ajax编程模型框架要达到以下目标:(1)与服务器无关。Ajax编程模型只负责Ajax客户端的设计和构造,把服务器看作是客户端可访问的资源,而不关心服务器端采用什么样的技术实现。用户可以根据配置文件进行服务器调用数据接口的配置。(2)封装和实现高层的数据访问接口。原始的XMLHttpRequest对象比较底层,使用它进行通信时需要处理很多通信细节,因此需要提供抽象层次更高的数据访问接口,如JSON序列化与反序列化、数据封装、存储等机制。(3)框架底层组件化。充分利用框架底层内置的组件模型,简化开发者的工作,让开发者将注意力放在业务逻辑上,而不会被诸如使用框架服务,与其他组件互操作,安全性等问题所困扰。(4)组装配置方便灵活。对象的组装采用配置文件和工厂模式有助于改善应用的内部结构,利用配置文件实现应用的组装,服务器端平台迁移方便,提高组件的可移植性和维护性。

2.2AJAX框架功能结构设计通过分析框架的设计与实现目标,初步可以将此框架分为下列4个部分:基础模块,控制模块,可视化模块,辅助模块,模块结构如图2所示。(1)基础模块。框架的底层模块,为其他模块提供支撑。主要是提供给其他模块使用有特定功能对象,能够有各种OOP机制保证有丰富的功能,包括远程调用、对元素操作、捕捉用户动作,扩展机制等。(2)控制模块。此模块主要是为Web应用服务设计,主要是避免直接操作Web页面上的元素,而是使用经过封装的事件方法来进行调用。包括:控制浏览器和服务器端的数据交互(并负责解析传输的数据结构),动态组装DOM元素等。(3)可视化模块。这部分是处理浏览器用户的可以感受到的实际应用。包括封装Web组件和交互技术,如何对页面进行布局和设计,显示特效,以及各种能够想到的用户能直接感受到功能性的方式。(4)辅助模块。把常用的类或函数进行了功能或性能的增强,提高某些类或函数的易用性或效率。

2.2.1AJAX框架基础模块基础模块应该包含下面的功能类或类包:包加载类,面向对象加强包,事件包。其中比较重要的是包加载类和面向对象加强包:(1)包加载类。可以保证用户只需要下载使用的类与函数就可以完成所调用的功能,而不需要像传统模式一样无论该功能是否有被使用到都必须被全部下载。包加载机制流程如图3所示。(2)面向对象加强包。主要是用来完善JavaScript的面向对象功能的方法。由于现在JavaScript并不是完全面向对象的语言,在许多地方都是需要使用者用很麻烦的方法才能模拟完成面向对象的功能的设计。整个框架希望达到使用者能像在高级开发语言一样可以方便使用、快速的面向对象方法进行自己的设计,如对已有类进行扩展和加强、提供继承机制等,这就必须加强JavaScript面向对象编程的功能,如提供与高级语言类似的方法或函数来达到面向对象编程的目的等。(3)事件包。用来屏蔽浏览器上对于DOM事件机制的不同。由于在不同的浏览器上对于处理DOM事件的方式并不一致,这就需要开发者根据不同的浏览器平台分别进行处理。为了方便使用者的跨浏览器处理和防止出现相关的模块接口复杂化,可以在DOM事件上屏蔽各个浏览器平台的不同,提供统一的方法给使用者调用,这样就可以使事件机制问题简单化,开发者也可以方便地进行统一设计。由于IE还没有对于DomLevel1的完整支持,所以当前的浏览器主要存在IE和DOM两种不同的事件模型。这直接导致了事件处理成为JavaScript跨浏览器编程中差异最大的部分。如图4,1种是IE所采用的冒泡模型,1种是DOM实现的捕获模型[12-13]。以下为IE和DOM两种事件模型。对于实际触发事件的对象在IE和DOM两种模型下还有所不同,因为Dom标准中文本节点可以触发事件的而IE不可以,所以在IE下oSrc是innerDiv(oSrc.nodeType==1),而在Dom下oSrc是内容为“testDiv”的文本节点(oSrc.nodeType==3)。

2.2.2控制模块控制模块应该包含下面的功能类或类包:DOM包,异步通讯包。(1)DOM包。用来进行各种DOM操作,并对不同浏览器的DOM操作细节进行统一的适配。同时也对一些DOM操作进行了功能的加强,这样就可以使对于DOM元素的操作更加方便和快捷。根据使用的情况,DOM包需要下列的功能进行强化,来支持各种页面的DOM元素操作:①定位操作,根据各种传入参数,获取DOM元素或元素队列;②填充操作,现在的DOM没有自动的填充操作,必须根据元素类型来进行各种参数的设置;③赋值操作,根据不同的对象设置其具有的value值;④创建操作,需要方便的参数设置来定义和生产各种DOM元素。(2)异步通讯包。是AJAX技术的核心之一。现在浏览器实现异步通讯主要依靠JavaScript语言中提供原始对象,然后通过对该对象进行各种属性设置来进行异步通讯操作。这样做对于一些常用的功能,就显得麻烦和繁琐,开发的时候容易出现低效率和错误。所以需要将该原始对象封装成1个可以调用的类,用统一的接口实现不同浏览器的异步通讯对象,提供快速的属性和方法设置,就能方便地与各种事件绑定,加强异常的检查和捕捉能力。并且可以建立异步通讯池,一开始有固定数量的异步通讯对象,并进行初始化,当用户使用时,就可以快速的提供生成好的对象供用户调用,当与服务器通讯结束,将该对象回收重新放入可使用的连接池中供下次使用。这样可以控制JavaScript的回收机制,提高其效率。

2.2.3可视化模块可视化模块应该包含下面的功能类或类包:组件包,组件管理包。(1)组件包。可以在页面上生成自己希望的各种页面元素和各种事件,各种组件可以互相关联,并能通过面向对象包的加强后进行扩充和增强功能。这样的话,就可以分离框架操作细节,集中关注业务逻辑。开发者开发组件时不用关心框架的底层细节,能够简便地使用框架提供的服务。这需要在JavaScript实现一套在HTML和DOM层次上的管理框架,如同C++的MFC框架和Java的JFC框架。(2)组件管理包。负责管理组件的生命周期,所有组件都必须通过组件管理器创建,必须由组件管理器保管其实例引用,组件与框架,组件与组件之间的互操作也必须经过组件管理包。

2.2.4辅助模块辅助模块包括对JavaScript语言中String对象功能的加强,如查找字串操作,高效率的字符串拼接操作等扩展[14]。可将String对象扩展下列方法用来增强其功能:(1)去空白操作。在字符串中经常需要将空白符去除,用来获取特定的字符内容。但是在原始String对象中并没有此操作,所以要有方法来灵活地满足对于空白符的操作。(2)拼接操作。将多个字符串连接起来。由于此操作是处理字符串时常用的方法,而目前使用的是生成过渡字符串的方法,所以可以使用效率更高的办法(如使用数组的联合)来完成该操作,从而优化性能。(3)强化查找操作。可以在字符串内根据指定的模式串进行遍历,找到特定位置或出现次数的模式串。

2.3核心模块的设计与实现如图5,框架中的包加载功能主要有下列各类[15]:ClassLoader用来实现获取和运行指定导入类的功能;FileReader用来解析导入类的路径和获取的功能;Error对象用来描述出现的各种问题;HttpError是Error的子类,专门用来描述HTTP型的异常,如无法找到地址等;UserlnfoObject用来保存全局的用户信息,如浏览器类型、已导入的类名称等。(1)包加载类为ClassLoader。ClassLoader提供开发人员加载功能的方法为“ClassLoader.include”,包括3个步骤:第1个步骤,根据所指明的包路径和类名查找是否在已导入的类库表中,如果已经导入则结束命令;没有的话,则依次生成命名空间对象,并通过同步通讯进行子文件夹(最后一级是类)查找操作。第2步骤,找到该类,并通过解释其代码,将其加载到整个运行环境中来。如果在解释的过程中发现其有依赖类,就会对其依赖类进行导入操作。第3步骤,将命名空间对象放入表明己加载过的表中,表明该对象已被加载过可成为全局变量,不需要再次被加载了。(2)面向对象包。主要包括继承机制、成员方法扩展、成员属性扩展,如图6所示。BaseObject用来提供用户使用的面向对象的方法,还需要UserConfig辅助BaseObject来完成用户的各种设置,UserInfoObject用来获取浏览器信息完成不同浏览器的适配。(3)异步通讯包。有2个部分:第1个部分是将异步通讯各种设置和操作封装成AjaxClass类,用来完成异步通讯功能,可以通过构造函数来进行基本的设置,用来完成异步通讯能力,第2部分根据AjaxClass对象,建立对其的管理机制,采用连接池的方式进行异本框架基于面向对象模式构建,通过将应用模块化和编程对象化,可明显提高开发的效率和稳定性;作为一种B/S架构的开发框架,本框架为开发者屏蔽了多语言混合编程、网络传输、浏览器自适应等困难,提供了完全面向对象、跨平台、事件驱动等特性,有利于开发出功能强大的B/S应用程序,并使应用程序的维护和代码重用变得简单易行,提高开发效率。从以下几个方面来讲,性能显著得到提高:(1)减少连接频繁打开、关闭的损耗。连接打开、关闭涉及到底层的操作,通过调用平台系统来实现。这种消耗对性能影响极大,特别是1个服务器接受连接的数量是有限的,在这有限的数量下,如果连接太多必然造成服务器过忙而无法应付其他用户的连接,影响系统的吞吐量。因此,服务器通过数据通道传送数据,使得只需要1个保持的连接就可以,避免了之前提到的损耗。(2)节约带宽。框架的实现上避免了反复请求,如前所述的通信队列等,把AJAX应用中遇到的技术难题进行了改进,大大减少冗余数据量在网络之间的传输。同时,在监听并打开数据通道后只需要在事件驱动下响应新的事件即可,节约了请求的带宽。(3)高性能可伸缩的体系结构。框架改变了浏览器与服务器端数据的交换方式,服务器产生异步事件直接发给客户端,由事件驱动,服务器从数据源得到实时的数据更新,作为服务给各种客户。服务器的响应已经达到了同步的程度,为我们呈现了一种高性能、可伸缩的体系结构。

3结语

AJAX技术作为Web开发的新技术,在最近得到广泛关注。如何进一步构建封装良好的AJAX框架以提高软件开发效率,利用最小代价构建交互性强、界面表现力丰富的富互联网应用程序,将是AJAX研究的重点。由于课题所涉及知识深度和时间等因素限制,笔者的工作有待进一步完善,结合课题研究过程中的体会,笔者认为可以从下面几个方向进行下一步的研究:(1)在深入研究Web服务器运行原理基础上,进一步完善、改进AJAX框架。(2)目前开发的AJAX框架系统,只是在当前有限的条件下进行,还需要在各种不同环境进行进一步测试、改进。(3)实现更多的组件类,就可以在页面上设计出更多丰富的页面元素。