一种面向图形绘制引擎的io中间件装置的制作方法

文档序号:6631695阅读:156来源:国知局
专利名称:一种面向图形绘制引擎的io中间件装置的制作方法
技术领域
本发明涉及一种面向图形绘制引擎的IO中间件装置。
背景技术
面向图形绘制引擎的IO中间件是一种新型的中间件,是为图形绘制引擎的特定应用而产生的。中间件技术是上个世纪90年代兴起的概念,它位于客户机/服务器的操作系统之上,管理计算资源和网络通讯。中间件特点包括满足大量应用的需要;运行于多种硬件和OS平台;支持分布式计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能;支持标准的协议;支持标准的接口。中间件分类分为数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等。
面向图形绘制引擎的IO中间件,不同于当前广为流行的分布式系统中间件,这种中间件为专注于为图形绘制引擎提供服务,用来解决图形绘制引擎中存在多种文件输入输出而产生的问题。
图形绘制引擎作为一种通用的平台,对各种三维模型、声音、文本、图像、视频等格式的文件支持必不可少,这样各种IO组件与图形绘制引擎结合的问题就无法回避。就如同分布式系统中需要中间件来屏蔽底层的网络与操作系统为分布式高层应用提供统一的服务借口一样,图形绘制引擎也需要一个IO中间件来对底层的文件读写进行封装,为图形绘制引擎提供一个统一的服务接口。
随着面向对象技术的发展,目前大多数图形绘制引擎均使用面向对象的方法进行设计与实现。在IO部分的设计中,对于高层调用者的设计关键在于要提供一个统一的读写模型的调用接口,在对于具体的实现中则要着力考虑在提供统一接口的前提下如何提高系统的可扩展性、性能、实现复杂性等多方面的因素。
要完成上述目标就必须设计IO管理者来自动维护因为文件类型不同造成的不同对象的调用。因此实际上管理方法的设计是IO中间件设计的关键。
目前,现有的图形绘制引擎中没有明确划分的IO中间件,IO部分都是以IO模块的方式实现的。一种较好的IO模块的设计类图如图1所示,其中SceneFileHandler和SceneFileType构成图形高层模块,起到管理者的作用,SceneFileHandler提供统一接口和IO管理者的作用,它提供一个读写文件的静态方法接口,同时维护一张文件扩展名到不同具体读写对象之间的映射表;SceneFileType作为高层管理者的接口,具体为文件读写对象的基类,该类的读和写的方法就是具体完成读写文件的方法。VRMLSceneFileType、OBJSceneFileType、BINSceneFileType构成IO作业对象,是具体读取不同类型文件的子类。
文件的读写过程为在读取文件的时候调用SceneFileHandler的读方法,该方法遍历扩展名后缀映射表根据文件的扩展名找到读取该文件的具体对象,再调用该对象的读和写方法进行读写。写文件的过程同读文件的过程相同。
扩展名后缀映射表初始化方法为为了能够在读写文件的过程中能够从扩展名后缀映射表中找出读写相应文件的对象,就必须有一个初始化这张映射表的过程。
该方案利用了面向对象语言的特性。在每一个具体读写文件的类中都包含一个该类的静态实例对象,在大多数面向对象的语言中程序的载入过程中就会实例化这些静态成员,因而就会调用对应类的构造函数。在构造函数中调用SceneFileHandler的添加场景文件类型的静态方法向扩展名后缀映射表中添加静态对象本身,就实现了关键的初始化过程。
上述方案提供SceneFileHandler∷read()方法的统一读取文件接口,在内部通过映射表完成根据文件类型到不同读写对象的调用,能够实现一部分IO中间件的设计要求。但是也存在着明显的不足,表现在(1)在这种方案中具体的读取对象与管理者紧耦合,不能明确的区分底层读写组件与中间件之间的层次划分。
(2)这种紧耦合的关系,使得底层组件无法脱离中间件形成单独的类库,这样随着图形绘制引擎支持文件类型的增加中间件的体积将不断变大,从而影响对于图形绘制引擎来说至关重要的实时性能。
(3)这种方案中采用静态成员变量对映射表进行注册,这种方法造成无用读写对象的冗余,且在系统运行过程中一直存在,随着底层IO组件的增多将会造成内存空间的浪费从而影响系统实时性能。
综合来说,现有技术的不足点在于只分为IO模块,没有对底层IO组件与IO中间件概念进行划分,或者划分不明确,从而造成系统运行过程中的冗余,影响系统的实时性能,从而限制了底层IO组件的扩展性,无法让大量的现有IO组件为图形绘制引擎所用。

发明内容
本发明的技术解决问题克服现有技术的不足,提供一种面向图形绘制引擎的IO中间件,该中间件在保证绘制引擎实时性能的基础上提高了系统的可扩展性,使得图形绘制引擎可以支持多种文件IO,让大量的现有IO组件容易为图形绘制引擎所用。
本发明的技术解决方案面向图形绘制引擎的IO中间件装置,其特点在于包括下列部分(1)中心管理模块,是其他模块的组织者和管理者,绘制引擎的IO调度中心,是整个IO中间件的核心,它主要完成4项功能a.向图形绘制引擎高层提供接口,该接口对于各种格式的文件保持同样的调用形式,从而屏蔽掉了底层的具体实现,高层的图形绘制引擎通过该接口向IO中间件发送读写文件的命令和返回文件读取结果;b.维护系统的IO组件列表和文件扩展名同IO组件的映射表,并根据图形绘制引擎的高层发送的读写命令,调度相应的IO组件来完成读写;c.为底层IO组件的注册中心,当底层IO组件对应的动态链接库载入时,动态链接库中会实例化一个代理对象,该对象自动向中心管理模块进行注册,中心管理模块接收代理对象的注册,向所维护的IO组件列表添加对应的表项;d.是读写器模块的调度者,当图形绘制引擎高层向中心管理模块发送读写命令并且中心管理模块找到对应的组件以后,中心管理模块就会调用读写器模块实现读写操作。
中心管理模块采用singleton模式进行设计,全局的唯一实例保证了IO组件动态调度的统一性。
(2)代理模块,用于向IO中间件中注册IO组件,是底层IO组件类库在IO中间件中的代理者。
代理模块是底层IO组件的注册器,是底层所有IO组件在IO中间件中的注册代理者,在中心管理模块载入动态链接库时代理模块会自动向中心管理模块注册底层IO组件,使得IO中间件可以知道底层IO组件的存在,并在需要的时候进行调用。
该模块采用了proxy模式进行设计,底层IO组件要使用该代理模块需要在类库中实例化一个代理类对象并作为底层IO组件的全局对象,这样在类库载入的时候就会调用构造函数实例化该对象,该构造函数向中心管理模块的读写器列表中写入该组件的读写器对象的指针,完成注册过程。
(3)动态库模块,是底层IO组件类库的实际管理者,IO中间件通过动态库模块动态加载底层IO组件,实现懒加载以提高图形系统的性能。
动态库模块对于底层IO组件动态链接库的加载受到中心管理模块的调度,因此中心管理模块与该模块之间是调用与被调用的关系。
动态库模块通过封装动态链接库的名字和链接库句柄的类的方法管理动态链接库。动态库模块查找中心管理模块中初始化的动态链接库目录,通过规定动态链接库的名字与其文件名字对应的一种映射方法,就能够最终载入底层IO组件所对应的动态链接库。
(4)读写器模块,是实际文件读写操作的执行者,所有对于文件的读写最终都是由该模块实现的。
读写器模块在IO中间件与底层IO组件之间形成了一个接口,无论是哪种类型的底层IO组件,通过实现读写器的同样接口的读写方法,IO中间件就可以调用该接口完成IO操作,因此该模块与中心管理模块是调用与被调用的关系,可以将中心管理模块看成是该模块的指挥者。
读写器模块在接收到中心管理模块的读写命令以后,首先要判断该命令是否能够被读写器接受,即判断所要读写文件的扩展名是否能够为被调用的底层IO组件所接受,如果上述判断成功读写器模块才调用底层IO组件中的读或写方法完成具体的文件读写。文件读写完成后,读写器返回给中心管理模块读写操作的结果。
本发明中4个模块的动态工作过程是图形绘制引擎高层向本发明的IO中间件装置发送读写模型文件的命令,首先中心管理模块根据要利用读取的文件扩展名遍历文件扩展名同IO组件的映射表,查找该类型文件对应的IO组件,完成从该模型文件扩展名到确定其对应底层的IO组件过程,底层IO组件确定以后再遍历IO组件列表,如果发现对应底层IO组件的对象已经存在于系统之中就调用读写器模块读取文件,如果该组件目前没有被载入那么中心管理模块就调用动态库模块载入IO组件对应的动态链接库,载入过程中IO组件通过代理模块向IO中间件进行注册,中心管理模块接受到IO组件的注册以后再调用IO组件完成读写文件的过程。
本发明与现有技术相比的优点在于(1)根据图形绘制引擎存在多种三维模型、声音、文本、图像等输入的特点,采用组件化设计方法将绘制引擎中I/O管理部分定位为一种中间件,为图形绘制引擎高层的核心绘制部分提供统一的文件读取接口,为底层I/O组件提供良好的接入方式,使得图形绘制引擎可以支持多种文件IO,使大量的IO组件为图形绘制引擎所用。
(2)为了向图形绘制引擎高层提供统一的文件读取接口,在建立文件扩展名与I/O组件之间的映射关系表的基础之上,定义底层IO组件动态链接库的命名规范,通过映射关系表和命名规范,I/O中间件可以将文件扩展名映射到对应的I/O组件上,从而动态载入链接库进行文件读取,提高了系统的可扩展性。
(3)为了对底层I/O组件提供良好的接入方式,首先生成可动态维护的I/O组件列表,采用代理模板机制,允许不同I/O组件中模板的实例对象动态修改I/O组件列表,从而达到I/O组件向图形绘制引擎进行自注册的目的,使得I/O组件与图形绘制引擎得到良好的结合,保证了系统的实时性。
(4)为了管理动态链接库的动态载入和I/O组件列表的动态维护过程,采用singleton模式设计了全局唯一实例的注册对象,通过该注册对象完成上述动态过程所必需的链接库路径初始化、映射关系表初始化等前提工作。使用singleton模式既能够保证保证了IO组件动态调度的统一性,同时又使初始化工作不必重复进行,无需在每次进行I/O操作时动态创建对象,有利于提高系统的实时性能。


图1现有技术方案类图;图2为本发明所处的层次关系示意图;图3为本发明各模块关系图;图4为本发明的IO中间件设计类图;图5为本发明的读取文件的活动图。
具体实施例方式
如图2所示,图2说明了本发明的面向图形绘制引擎的IO中间件在图形绘制系统中所处的层次关系,本发明处于底层IO组件和高层的图形绘制引擎中间。本发明的IO中间件为图形绘制引擎所调用,通过向高层的图形绘制引擎提供统一的接口实现了对于具体的底层IO组件的屏蔽。IO中间件能够识别图形绘制系统调用命令中读写文件的格式,从而调用不同的底层IO组件来完成具体的读写操作。IO中间件通过提供代理机制,并利用动态库模块和读写器模块实现了对于底层IO组件的管理和调用,这样形成了鲜明的层次关系。
如图3、图4所示,两图说明了IO中间件的模块组成以及各模块之间的相互作用关系,下面将具体进行介绍。
本发明由中心管理模块、代理模块,动态库模块和读写器模块四个模块组成,下面以C++语言为例具体说明各个模块的实现方案。图4展示了实现四个模块对应的类,分别是Registry,RegisterReaderWriterProxy,DynamicLibrary和ReaderWriter。
1.中心管理模块,是其他模块的组织者和管理者,绘制引擎的IO调度中心,是整个IO中间件的核心。
中心管理模块由Registry类实现,在该类中中心管理模块向图形绘制引擎高层提供的统一的读文件接口ReaderWriter∷ReadResultRegistry∷read()(const std∷string & fileName)和写文件接口ReaderWriter∷WriteResult Registry∷write()(const std∷string &fileName)。其中,ReadResult和WriteResult是封装读写操作的结果的两个类。
上述两个接口对于各种格式的文件保持同样的调用形式,从而达到屏蔽掉底层的具体实现的目的。图形绘制引擎通过该接口向IO中间件发送读写文件的命令和返回文件读写结果。
中心管理模块通过读写器列表_rwList和动态库列表_dlList来维护系统的IO组件列表,同时使用一个map对象_extAliasMap的数据结构来维护文件扩展名同IO组件的映射表。
文件的读写由中心管理模块来控制,读取的过程中就是利用上述数据结构进行组件管理的过程。下面就以读取FLT模型文件(图2中的底层IO组件之一)为例具体说明读取文件的过程,如图5所示,图形绘制引擎高层向IO中间件发送读取FLT模型文件的命令,中心管理模块首先利用_extAliasMap查找该类型文件对应的IO组件,完成从FLT的文件扩展名到确定其对应IO组件ReaderWriterFLT的过程。底层IO组件确定以后再遍历IO组件列表_rwList,如果发现对应组件,即ReaderWriterFLT的对象已经存在于系统之中就调用读写器ReaderWriterFLT的read()方法读取文件,如果该组件目前没有被载入那么中心管理模块就调用动态库模块载入IO组件对应的动态链接库,然后再调用IO组件完成读取文件的过程。
中心管理模块作为底层IO组件的注册中心是通过_rwList和_dlList两个组件列表来实现的。底层组件对应的动态链接库载入时,动态链接库中会实例化代理模块的读写器注册代理类RegisterReaderWriterProxy的一个对象,该对象自动向_rwList和_dlList添加对应的表项,从而完成注册过程。底层的其它组件如Bmp、3DS、RGB与该FLT的工作过程相似。
中心管理模块采用singleton模式进行设计,singleton模式的特点在于保证一个类仅有一个实例,并提供一个访问它的全局访问点。在具体的设计中使用C++语言的静态变量保证Register类在全局具有唯一实例,这样由于IO组件列表是Register类的成员变量,就保证了只有一套IO组件列表,保证了IO组件动态调度的统一性。Singleton和Proxy设计模式的参考资料如下《设计模式--可复用面向对象软件的基础》,作者[美]Erich GammaRichard Helm等/著 译者李英军 马晓星 蔡敏 刘建中,出版社机械工业出版社ISBN书号7-111-07575-7,出版日期2000年9月 版别版次2003年2月第7次印刷。
2.代理模块,用于向IO中间件中注册IO组件,是底层组件类库在IO中间件中的代理者。
该模块采用了proxy模式进行设计,proxy模式的特点在于为其他对象提供一个代理以控制对这个对象的访问。IO中间件的代理模块通过RegisterReaderWriterProxy类来实现。对于底层组件的扩展要求在每个类库中都有一个作为代理的RegisterReaderWriterProxy类的全局对象,在类库载入的时候就会调用构造函数实例化该对象。该构造函数向Register的读写器列表_rwlist中写入该组件的ReadWriter对象的指针,完成注册过程并准备在需要的时候进行调用。
3.动态库模块,是底层IO组件类库的实际管理者,IO中间件通过动态库模块动态加载底层IO组件,实现懒加载以提高图形系统的性能。动态库模块对于底层IO组件动态链接库的加载受到中心管理模块的调度,因此中心管理模块与该模块之间是调用与被调用的关系。
该模块的DynamicLibrary类封装了类库的名字_name链接库句柄_handle,中间件将通过该类的IoadLibray()方法调用操作系统的系统调用载入底层IO组件动态链接库的。将动态链接库文件放在中心管理模块初始化的动态链接库目录中,通过规定动态链接库的名字与其文件名字对应的一种映射方法,就能够最终载入底层IO组件所对应的动态链接库。
4.读写器模块,是实际文件读写操作的执行者,接收中心管理模块的命令,调用具体的组件方法完成读写。
该模块封装了实现插件读写的接口,该接口是一个纯虚类,该类的所有方法都是虚函数。在该类中包含了read()和write()方法,同时包含了acceptExtension()方法用来判断组件与文件类型的兼容性。具体的IO组件继承自该类,实现read()和write()方法来完成具体的文件读写,实现acceptExtension()方法提供对兼容性的判断。
读写器模块实际上是在IO中间件与底层IO组件之间形成了一个接口,要加入图形绘制引擎的底层组件必须实现上面提到的方法。这样,无论是哪种类型的底层IO组件,都可以通过调用读写器同样的接口来完成IO操作。
权利要求
1.面向图形绘制引擎的IO中间件装置,其特征在于包括下列部分(1)中心管理模块,是其他模块的组织者和管理者,绘制引擎的IO调度中心,是整个IO中间件的核心,它主要完成4项功能向图形绘制引擎高层提供接口,高层的图形绘制引擎通过该接口向IO中间件发送读写文件的命令和返回文件读取结果;维护系统的IO组件列表和文件扩展名同IO组件的映射表,并根据图形绘制引擎的高层发送的读写命令,调度相应的IO组件来完成读写;底层IO组件的注册中心,当底层IO组件对应的动态链接库载入时,动态链接库中会实例化一个代理对象,该代理对象自动向中心管理模块进行注册,中心管理模块接收代理对象的注册,向所维护的IO组件列表添加对应的表项;读写器模块的调度者,当图形绘制引擎高层向中心管理模块发送读写命令并且中心管理模块找到对应的组件以后,中心管理模块就会调用读写器模块实现读写操作;(2)代理模块,用于向中心管理模块注册IO组件,是底层所有IO组件在IO中间件中的注册代理者,在中心管理模块载入动态链接库时代理模块自动向中心管理模块注册底层IO组件;(3)动态库模块,是底层IO组件类库的实际管理者,中心管理模块通过动态库模块动态加载底层IO组件;(4)读写器模块,是实际文件读写操作的执行者,在IO中间件与底层IO组件之间形成了一个接口,所有对于文件的读写最终都是由该模块实现的。
2.根据权利要求1所述的面向图形绘制引擎的IO中间件装置,其特征在于所述的中心管理模块采用singleton模式进行设计,保证了IO组件动态调度的统一性。
3.根据权利要求1所述的面向图形绘制引擎的IO中间件装置,其特征在于所述的代理模块采用proxy模式进行设计,自动向中心管理模块注册底层IO组件的过程是底层IO组件要使用该代理模块需要在类库中实例化一个代理类对象并作为底层IO组件的全局对象,在类库载入的时候就会调用构造函数实例化该对象,该构造函数向中心管理模块的读写器列表中写入该组件的读写器对象的指针,完成注册过程。
全文摘要
面向图形绘制引擎的IO中间件装置主要4个部分中心管理模块,是其他模块的组织者和管理者,绘制引擎的IO调度中心,是整个IO中间件的核心;代理模块,用于向中心管理模块注册IO组件,是底层所有IO组件在IO中间件中的注册代理者;动态库模块,是底层IO组件类库的实际管理者,中心管理模块通过动态库模块动态加载底层IO组件;读写器模块,是实际文件读写操作的执行者,在IO中间件与底层IO组件之间形成了一个接口,所有对于文件的读写最终都是由该模块实现的。本发明在保证绘制引擎实时性能的基础上提高了系统的可扩展性,使得图形绘制引擎可以支持多种文件IO,让大量的IO组件为图形绘制引擎所用。
文档编号G06F9/46GK1749957SQ200510086660
公开日2006年3月22日 申请日期2005年10月20日 优先权日2005年10月20日
发明者王莉莉, 岳永辉 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1