网络远程教育应用DCOM技术在远程教育中实现组件化的网络虚拟实验室探讨_第1页
网络远程教育应用DCOM技术在远程教育中实现组件化的网络虚拟实验室探讨_第2页
网络远程教育应用DCOM技术在远程教育中实现组件化的网络虚拟实验室探讨_第3页
网络远程教育应用DCOM技术在远程教育中实现组件化的网络虚拟实验室探讨_第4页
网络远程教育应用DCOM技术在远程教育中实现组件化的网络虚拟实验室探讨_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...v.网络远程教育应用D技术在远程教育中实现组件化的网络虚拟实验室探讨摘要:为了使虚拟实验室适合远程网络教学的需要,使它能够在网络上工作,利用D技术以C/S方式实现了组件化的虚拟实验室。将模拟计算局部作为效劳器端,界面输入/输出作为客户端。在多用户的情况下D没有提供分布式策略,那么利用调度对象来平衡负载,从而引入分布式处理方式。关键词:远程教育;D;虚拟实验室;客户/效劳器〔C/S〕Abstract:Inordertomakethevirtuallaboratoryforteachingtheneedforlong-distancenetworktoenableittoworkonthenetwork,theuseofDtechnologytoC/Sachievedtheponentsofthevirtuallaboratory.Thesimulationaspartoftheserver-side,theinterfaceI/Oasaclient.Inmanycases,usersdidnotprovideDDistributedstrategy,theuseoftargetedschedulingtobalancetheload,sotheintroductionofdistributedprocessingway.Keywords:distanceeducation;D;virtuallaboratory;client/server(C/S)前言随着Internet的不断扩大,日益增多的计算机正在连接到互联网上,以共享资源。于是远程教育作为一种新的教育模式被提上了议事日程,现代计算机技术和网络技术为远程教育的开展提供了强有力的技术保障。尤其是浏览器技术和数据库技术的开展,使得教学活动不再受地域和时间上的限制,利用Internet就能进展实时或非实时的教与学,从而实现了跨越时空的学习。然而,大学实验室里许多实验课,在远程教育的网上学习中将会有许多困难。如何在网络课件中解决好这个问题,对于进一步办好远程教育是具有重要实际意义的。本文利用D(DistributedponentObjectModule)技术,将单机板的虚拟电路实验系统升级为网络版的虚拟电路实验系统。虚拟电路实验系统是一个用于仿真电子线路实验的软件。用户通过界面在计算机屏幕上选用各种元器件搭建电路,测试波形,得到实验数据等结果,以模拟真实实验的方式使用户掌握有关电路方面的知识。从功能上讲,虚拟实验室系统分为两个模块:一个是仿真计算局部,它是整个系统的核心局部,负责输入数据的处理、大量的模拟计算,并向输出界面局部传送结果;另一个那么包括输入界面和输出界面两局部。输入局部完成用户电路搭建时的界面处理,从某种角度来讲,它完成了数据的采集。同样,输出界面完成结果的输出,如波形输出、数据输出等。为了满足远程教学的需要,必须将单机虚拟实验系统改造为可在网络上运行的系统。从通信的开销上来讲,Socket是最适宜的。但是Socket本身是面向通信的,有复杂的通信细节需要处理。而且,Socket效劳器对于客户来说,很难提供稳定的应用程序接口,一旦效劳器发生了变化,客户必须相应地变化,不利于客户和效劳器单独开发和维护。另外一种那么是文本采用的(ponentObjectModule)技术。1组件对象模型()现代的软件开发都以模块方式进展。每个模块均有自己的功能,并与其它模块以接口进展通信。于是,复杂的软件系统就可以用搭积木的方式进展。这就是组件软件的根本思想。就是实现软件组件化的一种努力。实际上,是一种规定了组件之间的接口标准。还引入了面向对象的思想,对象是一个能完成一定功能的软件模块。对象是组件的根本构成,它以接口的方式向其它对象或软件提供效劳。通常情况下,对象的效劳与被效劳都是客户/效劳器的关系。对象不同于C++对象。C++对象是类的实例。C++是面向对象的编程语言,是人们在源码级试图实现软件模块化的一种努力。对象是二进制的标准。换言之,C++在源码级提供了代码重用的便利,而是在二进制级提供了可重用性。的二进制级重用是通过对象工作来实现的。它主要有两种方式:(1)包容,一个对象通过利用另一对象的功能实现同样的接口。(2)聚合,一个对象直接将另一对象的接口提供应客户。由于的实现是在二进制级,而不是源码级,于是决定了与语言的无关性。一个用C或C++实现的可以与一个用BASIC实现的客户正常地通信。因此,整个软件的一局部可以用一种语言开发,而另一局部可以使用其它语言。这给软件开发者在根据性能的要求做出编程语言选择时提供了方便。的另一个特性是进程的透明性。一个组件可以有很多种形式出现,比方DLL,EXE等。DLL形式的组件与客户程序工作在同一进程,EXE组件工作在独立的进程。无论是进程内的组件还是进程外的组件,对于客户来讲都是同样的,客户无需关心进程间的通信。进程间的通信是复杂的,然而掩盖了这种复杂性。2分布式组件对象模型(D)给软件开发带来了极大的便利。但是,在网络环境下,单机上的组件重用和进程透明性已不能满足需要,必须扩展。Microsoft的D便是在网络环境下的无缝扩展,D能够支持在局域网、广域网,甚至在Internet上与不同计算机的对象之间的通信。使用D,应用程序可以在位置上到达分布性,从而满足客户和应用的需求。D隐藏了网络通信的细节,在可以利用的网络协议的支持下,组件或客户无需关心对方组件的位置,便可以进展通信。因此D具有协议无关性。在网络环境下,组件之间的通信不像在的进程内或进程间的LPC(LocalProcedureCall),而是以RPC(RemoteProcedureCall)来完成的。客户与对象必须通过Proxy和Stub来进展通信。Proxy工作在客户进程中,Stub工作在效劳器进程中。此外,D提供了所有在网络上工作的软件都应有的特殊性与平安性。3/D在网络虚拟实验室中的应用从程序设计的角度来看,/D的构造是这样的:对象是构建组件的根本元素,而效劳器为组件提供进程内/外的效劳,提供了组件工作的场所。对象是一个自包含的构造,提供一定的功能,它不能直接被客户使用,客户必须通过接口它。对象必须通过接口来表现自己的功能,甚至对象的创立都不能由客户直接完成,对象的创立必须借助一个特殊的对象,即类厂来完成。对于客户,它可以是一个组件对象也可以是一个支持的普通程序。它通过API来调用类厂创立对象,并增加引用计数,来决定对象的生存期。这样库和效劳器会在适当的时候卸载。虽然C++对象和对象有本质的区别,但是它们在二进制一级的构造上有一定的相似性,C++对象和对象都使用VTable。而且,C++的对象描述能力使它很容易创立。因此C++是实现的最正确选择。VisualC++在COM编程方面提供了两种方式:一种是MFC(MicrosoftFoundationClass);一种是ATL(ActiveTemplateLibrary)。MFC是以嵌套类的方式来实现的;ATL大量地使用于模板,采用多重继承的方式来实现。但不管是MFC还是ATL,都为开发软件提供了极大的方便,很多的处理都由MFC提供,比方引用计数、效劳器锁计数、类厂等。尽管MFC和ATL都能实现,但MFC是一种开发完全应用程序的有效手段。相比之下,ATL是专为设计的。所以,ATL更适合创立快速小型化的组件。3.1效劳器在本文设计的网络虚拟实验室系统中,将模拟计算局部作为效劳器。对于单用户效劳器的情况,可以使用STA(SingleThreadApartment)线程模型。在这种情况下,分作为一个对象。对于在这个组件来说,它至少应该提供一个Simulator对象、一个Isimulate接口和两种方法。interfaceIDatdT’:IUnknown{HRESULTInputData([in]...);HRESULTOutputData([out]...);…};这个对象是一个可连接对象。在模拟算法完成之后,它必须向用户发出通知。而用户程序内置了一个接收器。客户使用InputData()向效劳器传送采集的数据,效劳器在处理数据完成之后,客户通过OutputData()取得处理结果。对于多用户效劳器,实际上只要简单地在这个组件中参加注册表信息,或者用CoCreatelnst9nEX(),以主机信息为参数就可以在指定主机上创立对象,利用D进展通信。位置透明性使客户很容易使用D。如果为客户指定相应的主机(即效劳器),客户就可以创立并使用对象。3.2多用户效劳器的负载平衡在多用户的情况下,当用户的数量到达一定程度的时候,多个用户在主机上创立的对象实例会使效劳器的压力增大,从而造成效劳器性能的下降,影响效劳质量。当然,可以使用多个效劳器来提供效劳,人工地平衡多个效劳器上的负载,但这将给维护带来极大的困难。一旦用户群动态地变化,效劳器的负载平衡将被打破。显然,这种没有任何分布式策略的分布式(D)是不够的。虽然D提供了位置透明性,但是没有提供分布式的策略,分布式策略需要软件开发者来提供。因此,提供负载平衡是D组件开发的一个重要任务。为了平衡多个效劳器的负载,建立了如下列图所示的系统构造。对于模拟计算的对象,为了防止屡次重复地创立和释放,本文采用了效劳对象。效劳对象是已创立的对象实例。该系统中还引入了简单的调度对象。调度对象是一个中间对象,它以STA(单线程Apartment)方式工作。调度对象负责建立效劳对象Simulator,维护主机列表COSERVERINFOServer[N]、对象列表ISimulate*pISimulate[N]和对象状态列表IntState[N]。主机列表保存主机名字,对象列表存放对象接口指针,状态列表是一个对象的状态值。对于对象来讲,它有三种状态:(1)未创立或创立失败;(2)忙;(3)闲。三个列表都以全局变量的形式出现。由于使用了STA,可以不必考虑对象的同步问题。但是,多个同类对象全局变量仍然可能造成对象在线程上的平安问题。因此,本文使用临界区(CriticalSection)来同步。此外,调度对象是一个可连接对象,它必须与效劳对象通信并获得效劳对象的状态。调度对象负责在主机列表指定的主机上创立效劳对象,并初始化。所有的客户在需要效劳的时候应向调度对象发出请求。当有客户向调度对象请求效劳时,调度对象检索主机列表、对象列表和状态列表,在选定主机上查询并检查对象的有效性,获取效劳对象接口指针,并返回给客户,然后客户与效劳对象通信。根据的特性,此时客户和效劳对象之间的通信是直接进展的,不经过调度对象。调度对象根据什么原那么来获取某个主机上的对象是一个策略上的问题,实际应用中必须考虑主机的负载平衡。对于复杂的系统,这种策略可能相当的复杂。然而,为了简单起见,本文采用了以执行任务的对象在主机上的数量多少作为平衡负载的标准。在客户使用完毕对象后,对象激发一个调度对象事件,调度对象负责将对象状态复位。因此,调度对象是一个可连接对象,实现了一个接收器,接收来自效劳对象的事件。此外,调度对象还负责将效劳对象卸载。应该看到调度对象的引入增加了网络通信量,但对于采用分布式策略的系统来说是必要的。实际上调度对象很大程度上起到了目录效劳的作用。如果必要的话,调度对象加上适当的模块可以作为一个简单的中间管理模块,比方控制用户登录、限制用户数量等。3.3客户客户控制着虚拟实验室数据的采集和输出表现,它将直接面对用户。对于客户来讲,它只需要在数据处理的时候,在执行调度的主机上创立调度对象,本文来自范文中国网.fw789.。调度对象负责返回可用的效劳对象。客户将数据交给效劳对象来处理,并取得输出值。在客户与效劳对象通信的过程中,客户还必须接收来自效劳对象激发的事件,所以客户必须内置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论