zoukankan      html  css  js  c++  java
  • DCOM 技术在网络虚拟实验室中的应用

    收稿日期: 2002203202 ; 修返日期: 2002207217
    DCOM 技术在网络虚拟实验室中的应用
    朱秋萍 , 贾  群
    (武汉大学 电子信息学院 , 湖北 武汉 430072)
    摘  要: 为了使虚拟实验室适合远程网络教学的需要,使它能够在网络上工作 ,利用 DCOM技术 ,以
    C/ S(Client/ Server)方式实现了组件化的虚拟实验室。将模拟计算部分作为服务器,界面输入/ 输出作为客
    户。在多用户的情况下 ,DCOM没有提供分布式策略 ,则利用调度对象来平衡负载,从而引入分布式处理
    方式。
    关键词: DCOM; 虚拟实验室; 客户/ 服务器
    中图法分类号: TP391    文献标识码: A    文章编号: 100123695(2003) 0220041203
    DCOM Application in Virtual Electronic Laboratory for
    Distance Education
    ZHU Qiu2ping , J IA Qun
    ( College of Electronic Information , Wuhan University , Wuhan Hubei 430072 , China)
    Abstract : As a software for distance education , Virtual Electronic Circuit Laboratory must be able to work over network. This paper
    implemented Virtual Electronic Circuit Laboratory for distance learning based on DCOM. Athough DCOM provides no distributed solu2
    tions to serve multiuser , but a COM object is used to dispatch the requests from users to specific objects.
    Key words : DCOM(Distributed Component Object Moudle) ; Virtual Laboratory ; Client/ Server
      在当前信息爆炸的时代,网络的出现给人们的生活
    带来了深刻的变化。作为世界上最大的计算机互联网
    Internet 仍在不断地扩大 ,越来越多的计算机正在连接到
    互联网上 ,以共享资源。于是远程教育作为一种新的教
    育模式被提上了议事日程 ,现代计算机技术和网络技术
    为远程教育的发展提供了强有力的技术保障。尤其是
    WWW浏览器技术和数据库技术的发展,使得师生之间
    不受地域和时间上的限制 ,利用 Internet 就能进行实时或
    非实时的教与学 ,从而实现了跨时间、跨空间的学习,这
    是传统教育不能相比的。然而,另一方面 ,在远程教育
    中 ,学生远离学校 ,不能在大学实验室里做实验,这对于
    理工科的学生学习技术类课程来说,网上学习将会带来
    许多困难。如何在网络课件中解决好这个问题,对于进
    一步办好远程教育是具有重要实际意义的。比如理工
    科专业的“电子技术”课程 ,人们无法通过网络让学生接
    触到实际的器件 ,那么 ,如何在“电子技术”网络课程中
    弥补学生远程学习缺少实验的弊端呢? 为此 ,本文利用
    DCOM(Distributed Component Object Module) 技术 ,将单机
    版的虚拟电路实验系统升级为网络版的虚拟电路实验
    系统。
    虚拟电路实验系统是一个用于仿真电子线路实验
    的软件[ 1 ]。用户通过界面在计算机屏幕上选用各种元
    器件搭建电路 ,测试波形 ,得到实验数据等结果 ,以模拟
    真实实验的方式使用户掌握有关电路方面的知识。从
    功能上讲 ,虚拟实验室系统分为两个模块:一个是仿真
    计算部分 ,它是整个系统的核心部分 ,负责输入数据的
    处理、大量的模拟计算 ,并向输出界面部分传送结果;另
    一个则包括输入界面和输出界面两部分。输入部分完
    成用户电路搭建时的界面处理,从某种角度来讲 ,它完
    成了数据的采集。同样,输出界面完成结果的输出,如
    波形输出、数据输出等。
    为了满足远程教学的需要 ,必须将单机虚拟实验系
    统改造为可在网络上运行的系统。从通信的开销上来
    讲 ,Socket 是最合适的。但是 Socket 本身是面向通信的 ,
    有复杂的通信细节需要处理。而且,Socket 服务器对于
    客户来说 ,很难提供稳定的应用程序接口,一旦服务器
    发生了变化 ,客户必须相应地变化 ,不利于客户和服务
    器单独开发和维护。另外一种则是本文采用的 COM
    (Component Object Module)技术。
    1 组件对象模型(COM)
    现代的软件开发都以模块方式进行。每个模块均
    第 2 期 朱秋萍等:DCOM技术在网络虚拟实验室中的应用 · 14 ·  有自己的功能 ,并与其它模块以接口进行通信。于是,
    复杂的软件系统就可以用搭积木的方式进行。这就是
    组件软件的基本思想。
    COM就是实现软件组件化的一种努力。实际上,
    COM是一种规范 , COM 规定了组件之间的接口标准。
    COM还引入了面向对象的思想。COM对象是一个能完
    成一定功能的软件模块。COM对象是组件的基本构成。
    它以接口的方式向其它对象或软件提供服务。通常情
    况下 ,对象的服务与被服务都是客户/ 服务器的关系。
    COM对象不同于 C + + 对象。C + + 对象是类的实
    例。C + + 是面向对象的编程语言 ,是人们在源码级试
    图实现软件模块化的一种努力。COM 对象是二进制的
    规范。也就是说 ,C + + 在源码级提供了代码重用的便
    利 ,而 COM是在二进制级提供了可重用性。COM 的二
    进制级重用是通过 COM对象工作来实现的。它主要有
    两种方式[ 2 ]
    : (1) 包容。一个对象通过利用另一对象的
    功能实现同样的接口。(2) 聚合。一个对象直接将另一
    对象的接口提供给客户。
    由于 COM的实现是在二进制级 ,而不是源码级 ,于
    是决定了 COM与语言的无关性。一个用 C 或 C + + 实
    现的 COM可以与一个用BASIC实现的客户正常地通信。
    因此 ,整个软件的一部分可以用一种语言开发,而另一
    部分可以使用其它语言。这给软件开发者在根据性能
    的要求作出编程语言选择时提供了方便。COM 的另一
    个特性是进程的透明性。一个组件可以很多种形式出
    现 ,比如DLL ,EXE等。DLL 形式的组件与客户程序工作
    在同一进程 ,EXE组件工作在独立的进程。无论是进程
    内的组件还是进程外的组件,对于客户来讲都是同样
    的 ,客户无需关心进程间的通信。进程间的通信是复杂
    的 ,然而 COM掩盖了这种复杂性。
    2 分布式组件对象模型(DCOM)
    COM给软件开发带来了极大的便利。但是,在网络
    环境下 ,单机上的组件重用和进程透明性已不能满足需
    要 ,COM必须扩展。Microsoft 的 DCOM便是 COM在网络
    环境下的无缝扩展 ,DCOM 能够支持在局域网、广域网,
    甚至在 Internet 上与不同计算机的对象之间的通信。使
    用DCOM ,应用程序可以在位置上达到分布性,从而满足
    客户和应用的需求。
    DCOM隐藏了网络通信的细节,在可以利用的网络
    协议的支持下 ,组件或客户无需关心对方组件的位置,
    便可以进行通信。因此 DCOM 具有协议无关性。在网
    络环境下 ,组件之间的通信不像在COM的进程内或进程
    间的LPC(Local Procedure Call) ,而是以 RPC(Remote Proce2
    dure Call)来完成的。客户与 COM对象必须通过 Proxy 和
    Stub 来进行通信。Proxy 工作在客户进程中 ,Stub 工作在
    服务器进程中。
    RPC不是一种网络协议 ,而是建立在网络协议之上
    的一种网络上进程间通信的技术。任何通过 RPC 进行
    通信的进程都必须将数据 Marshaling/ Unmarshaling。Mar2
    shaling/ Unmarshaling是由 Proxy/ Stub 来完成的。正是因
    为 RPC技术的参与 ,DCOM正在向更大范围的平台无关
    性迈进。除此之外 ,DCOM 提供了所有在网络上工作的
    软件都应有的特性与安全性。
    3 COM/ DCOM 在网络虚拟实验室中的应用
    从程序设计的角度来看 ,COM/ DCOM的结构是这样
    的:对象是构建组件的基本元素,而服务器为组件提供
    进程内/ 外的服务 ,提供了组件工作的场所。对象是一
    个自包含的结构 ,提供一定的功能 ,它不能直接被客户
    使用 ,客户必须通过接口访问它。对象必须通过接口来
    表现自己的功能 ,甚至对象的创建都不能由客户直接完
    成 ,对象的创建必须借助一个特殊的对象,即类厂来完
    成。
    对于客户 ,它可以是一个组件对象,也可以是一个
    支持 COM的普通程序。它通过 COM API 来调用类厂创
    建对象 ,并增加引用计数 ,来决定对象的生存期。这样
    COM库和 COM服务器会在适当的时候卸载。
    虽然 C + + 对象和 COM对象有本质的区别 ,但是它
    们在二进制一级的构造上有一定的相似性,C + + 对象
    和 COM对象都使用 VTable。而且 ,C + + 的对象描述能
    力使它很容易创建 COM。因此 C + + 是实现 COM 的最
    佳选择。Visual C + + 在 COM 编程方面提供了两种方
    式:一种是 MFC(Microsoft Foundation Class) ;一种是 ATL
    (Active Template Library) 。MFC 是以嵌套类的方式来实
    现 COM的;ATL 大量地使用了模板 ,采用多重继承的方
    式来实现 COM。但不管是MFC还是ATL ,都为开发软件
    提供了极大的方便 ,很多的处理都由 MFC 和 ATL 来提
    供 ,比如引用计数、服务器锁计数、类厂等。尽管MFC和
    ATL 都能实现 COM ,但MFC是一种开发完全应用程序的
    有效手段。相比之下 ,ATL 是专为 COM 设计的。所以 ,
    ATL 更适合创建快速小型化的 COM组件。
    此外 ,VC + + 还提供了功能强大的接口描述语言
    IDL(Interface Definition Language) 编译器 MIDL。IDL 通过
    MIDL 编译可以产生 Marshaling/ Unmarshaling 代码。从而
    在不必要的时候 ,可以不用手工编写复杂的 Marshaling/
    Unmarshaling 代码 ,很方便地生成 Proxy/ Stub。然而在必
    要的时候 ,仍必须用手工编写代码。本文在开发中选用
    了ATL。
    311 服务器
    在本文设计的网络虚拟实验室系统中,将模拟计算
    部分作为服务器。
    对于单用户服务器的情况,可以使用 STA ( Single
    Thread Apartment)线程模型。在这种情况下 ,模拟计算部
    分作为一个COM对象。对于这个组件来说 ,它至少应该
      · 24 · 计算机应用研究 2003 年提供一个 Simulator 对象、一个 Isimulate 接口和两种方法。
    interface IDataT:IUnknown
    {
      HRESULT InputData ([ in ] …) ;
      HRESULT OutputData ([out ] …) ;
      …
    } ;
    这个对象是一个可连接对象。在模拟算法完成之
    后 ,它必须向用户发出通知。而用户程序内置了一个接
    收器。客户使用 InputData ( ) 向服务器传送采集的数据 ,
    服务器在处理数据完成之后,客户通过 OutputData ( ) 取
    得处理结果。
    对于多用户服务器 ,实际上只要简单地在这个 COM
    组件中加入注册表信息 ,或者用 CoCreateInstanEX( ) ,以
    主机信息为参数就可以在指定主机上创建对象,利用
    DCOM 进 行 通 信。位 置 透 明 性 使 客 户 很 容 易 使 用
    DCOM。如果为客户指定相应的主机(即服务器) ,客户
    就可以创建并使用对象。
    312 多用户服务器的负载平衡
    在多用户的情况下 ,当用户的数量达到一定程度的
    时候 ,多个用户在主机上创建的对象实例会使服务器的
    压力增大 ,从而造成服务器性能的下降,影响服务质量。
    当然 ,可以使用多个服务器来提供服务,人工地平衡多
    个服务器上的负载 ,但这将给维护带来极大的困难。一
    旦用户群动态地变化 ,服务器的负载平衡将被打破。显
    然 ,这种没有任何分布式策略的分布式 COM(DCOM) 是
    不够的。虽然DCOM提供了位置透明性 ,但是没有提供
    分布式的策略 ,分布式策略需要软件开发者来提供。因
    此 ,提供负载平衡是 DCOM 组件开发的一个重要任务。
    为了平衡多个服务器的负载,建立了如图 1 所示的系统
    结构。
    图 1  基于 DCOM的系统结构
    对于模拟计算的COM对象 ,为了避免多次重复地创
    建和释放 ,本文采用了服务对象。服务对象是已创建的
    COM对象实例。该系统中还引入了简单的调度对象。
    调度对象是一个中间对象,它以 STA(单线程 Apartment)
    方式工作。调度对象负责建立服务对象 Simulator ,并维
    护主机列表 COSERVERINFO Server [ N]、对象列表 ISimu2
    late 3 pISimulate[ N] 和对象状态列表 Int State[ N]。主机
    列表保存主机名字 ,对象列表存放对象接口指针,状态
    列表是一个对象的状态值。对于对象来讲,它有三种状
    态:(1)未创建或创建失败;(2)忙;(3)闲。三个列表都以
    全局变量的形式出现。由于使用了 STA ,可以不必考虑
    对象的同步问题。但是 ,多个同类对象访问全局变量仍
    然可能造成对象在线程上的安全问题。因此,本文使用
    临界区(Critical Section) 来同步。此外 ,调度对象是一个
    可连接对象 ,它必须与服务对象通信并获得服务对象的
    状态。
    调度对象负责在主机列表指定的主机上创建服务
    对象 ,并初始化。所有的客户在需要服务的时候应向调
    度对象发出请求。当有客户向调度对象请求服务时,调
    度对象检索主机列表、对象列表和状态列表,在选定主
    机上查询并检查对象的有效性,获取服务对象接口指
    针 ,并返回给客户 ,然后客户与服务对象通信。根据
    COM的特性 ,此时客户和服务对象之间的通信是直接进
    行的 ,不经过调度对象。调度对象根据什么原则来获取
    某个主机上的对象是一个策略上的问题,实际应用中必
    须考虑主机的负载平衡。对于复杂的系统,这种策略可
    能相当的复杂。然而,为了简单起见 ,本文采用了以执
    行任务的对象在主机上的数量多少作为平衡负载的标
    准。在客户使用完毕对象后,对象激发一个调度对象事
    件 ,调度对象负责将对象状态复位。因此,调度对象是
    一个可连接对象 ,实现了一个接收器 ,接收来自服务对
    象的事件。
    此外 ,调度对象还负责将服务对象卸载。应该看到
    调度对象的引入增加了网络通信量,但对于采用分布式
    策略的系统来说是必要的。实际上调度对象很大程度
    上起到了目录服务的作用。如果必要的话,调度对象加
    上适当的模块可以作为一个简单的中间管理模块,比如
    控制用户登录、限制用户数量等。
    313 客户
    客户控制着虚拟实验室数据的采集和输出表现,它
    将直接面对用户。对于客户来讲,它只需要在数据处理
    的时候 ,在执行调度的主机上创建调度对象,调度对象
    负责返回可用的服务对象。客户将数据交给服务对象
    来处理 ,并取得输出值。在客户与服务对象通信的过程
    中 ,客户还必须接收来自服务对象激发的事件,所以客
    户必须内置接收器。
    4 结束语
    本文使用了调度对象来实现负载的平衡,采用的平
    衡策略是以运行在主机上的对象数目作为衡量负载的
    标准 ,这对于简单的系统已经足够了,但对于比较复杂
    的系统 ,必须有更复杂的负载平衡策略。
    DCOM虽然提供了很多的优点 ,如位置透明性、协议
    无关性等 ,然而这是以增加开销为代价的。与 Socket 比
    较 ,DCOM的开销要大一些 ,但是DCOM提供的方便超出
    了它带来的额外开销。
    参考文献:
    [ 1 ] 朱秋萍 ,李永茂 ,等. 数字电路虚拟实验室系统的研究与
    实现[J ] .武汉大学学报 (自然科学版) ,2000 ,46 (1) :1042
    108.
    [2 ] 潘爱民. COM 原理与应用[ M] . 北京:清华大学出版社 ,
    1999.
    作者简介:
    朱秋萍(19472) ,女 ,教授 ,研究方向是多媒体信息处理与网络
    通信;贾群(19792) ,男 ,硕士生 ,研究方向是多媒体信息处理与
    网络通信。
    第 2 期 朱秋萍等:DCOM技术在网络虚拟实验室中的应用 · 34 ·  
  • 相关阅读:
    隐藏窗口任务栏图标
    初始化 键盘设备
    web2.0最全的国外API应用集合
    about hadoop-eclipse-plugin used by IDE
    Instructions Set JAVA_HOME System-Wide
    腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
    word 2013 没有控件菜单怎么办,添加控件菜单
    面试题:实现LRUCache::Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法
    面试题:m个长度为n的ordered array,求top k 个 数字
    面试题: generate an equation, by inserting operator add ("+") and minus ("-") among the array to make equationExpression == 0
  • 原文地址:https://www.cnblogs.com/jjkv3/p/2540054.html
Copyright © 2011-2022 走看看