荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题:  分布式应用开发
发信站: BBS 荔园晨风站 (Thu Jan 21 22:59:02 1999), 转信


   不可视对象及其代理对象
    不可视对象(NVO)。不可视对象最早在PowerBuilder 3.0中引入,
功能在以后的每一个版本中都得到一定的加强。简单地说,不可视对
象是一个进程对象。在这个对象中,没有任何可视的成份,因此而得名
。不可视对象可以是一个事务处理的对象,由一些事务处理函数组成
并有一个方法集作为外界访问接口,用户通过这个由函数和事件组成
的方法集调用事务处理函数。在分布式PowerBuilder中,我们将这样
的不可视对象放在了远端,使事务处理的函数在应用服务器中或者说
在另外的一台计算机中运行。
    代理对象(proxy)。我们在不可视对象的外部增加了一层包装,把
这一层作为编程的接口层(API)。这就是该不可视对象的代理对象(pr
oxy),代理对象作为不可视对象的最外层包装,具有与该对象相同的pu
blic访问特性的方法和属性。将实际的对象与代理对象分离开,这就
形成了分布式的结构。不可视对象所进行的事务处理放在了应用服务
器上,而它的代理对象放在了客户端。
    在客户端,用户对代理对象进行操作,但这只是不可视对象的一个
API接口,它并不包含真正的方法。代理在内部重新调用运行在远端的
对象的方法。在服务器一端,运行着的是一个真正的不可视对象,它同
普通的不可视对象没有任何不同之处,只是对这个不可视对象的调用
是在客户端通过它的代理进行的。每一个运行在服务器端的对象在客
户端都必须有它的代理,这个对象才能够被该客户端的应用程序所调
用。一个应用服务器可能会有多个客户机,这样在一个服务器上的不
可视对象就可能在客户机上有多个不同的代理。
    连接对象及传输对象
    介绍了服务器端的不可视对象和客户端的代理对象这两个在分布
式应用中的对等部分接下来我们要考虑的是如何将这两个部分建立连
接。在连接的过程中,我们就要涉及另两个对等的对象,这就是在Powe
rBuilder5.0中新增加的两个对象类型:连接(connection)及传输(t r
ansport)对象。connection对象是在客户端用以同服务器进行通讯的
对象,反过来,traspo rt对象是驻留在服务器端用以同客户端应用进
行通讯的对象。
    connection对象。我们可以将这一对象同用在数据库事务的tran
saction对象进行类比。我们通过定义transaction对象的属性连接某
个数据库服务器。在客户端的应用中,用数据窗口或直接使用SQL访问
数据库服务器时,我们须使用SetTransObject()函数或USING关键词来
指定这个数据窗口所使用的transaction对象。同理,分布式事务中,
客户端的代理对象就如同一个数据窗口,我们也应当指定代理对象同
哪个服务器进行通讯。因为正如一个数据窗口可以访问不同的数据库
服务器一样,一个代理对象也可以代理不同应用服务器上的不可视对
象,而其中的connection对象就和transaction对象一样,它的属性就
是用以区别不同的服务器。在connection对象中最重要的三个属性是
application、 driver、 location。drie r属性是用以指定我们所
使用的通讯协议,目前支持的是TCP/IP和Named Pipes;location属性
是应用服务器的名称。
    和事务对象中使用CONNECT USING SQLCA一样,接下来我们调用一
个connection的对象函数ConnectToServer(),建立客户和应用服务器
的连接。也正如事务对象一样,在调用这个函数后,我们应检验connec
tion的返回值,以确认连接是否成功。connection对象同服务器建立
连接后,客户端即可同服务器进行通话。下一步我们指定代理对象使
用哪一个连接对象。这就好比是在数据窗口中使用SetTransObject函
数将数据窗口和事务对象建立联系,代理对象使用的是SetConnect()
函数。一个PowerBuilder的应用可以同时连接多个数据库服务器,同
样在分布式PowerBuilder中,也可以同时建立多个连接对象,每个连接
对象同不同的应用服务器相连,使一个客户端应用可以同时访问多个
应用服务器。
    transport对象。在客户端我们使用的是connection对象同服务
器进行联系,而在服务器端我们使用的是transport对象同客户端进行
连接。transport对象用以指示本应用服务器的一些属性值,并且将这
个应用服务器启动起来。transport也有着两个重要的属性applicato
n和driver。同样driver是指TCP/IP或Named Pipe协议,而applicati
on是指正在监听的应用名称。启动服务器的函数是listen(),执行了
这个函数后,在服务器端就增加了一个进程用于监听客户端的请求。

    分布式PowerBuilder的工作原理
    当一个connection对象成功调用ConnectToServer函数后,服务器
端将在内存中开辟一个用于该客户端应用的工作区;而在proxy对象调
用了SetConnect函数后,系统将在服务器端初始化一个不可视对象的
实例。注意系统并不是在用户初始化代理对象时初始化不可视用户对
象的,而是在调用SetConnect函数后,在服务器端对NVO进行初始化的

    分布式PowerBuilder在服务器一端实现的是一个虚拟机模型。每
当一个客户请求连接时,服务器就会在内存中建立一个新的区域用于
该客户的请求,每一个内存空间都相互独立。在PowerBuilder 5.0中
分布式应用只支持同步方式,也就是说,当调用代理对象的一个函数时
系统实际将调用服务器端的不可视对象的函数。这时客户端应用将被
挂起,直至服务器函数运行完毕,客户端才能继续工作。但在即将发布
的6.0中将支持异步运算。
    当调用一个客户端函数时,一定要给这个函数传递参数。目前的
分布式PowerBuilder版本可以支持多种数据类型的传递:所有简单的
数据类型、结构和数组,使用传值法和传参法。还支持传递不可视对
象。不过不能以引用方式传递对象,例如不能在分布式中传递一个窗
口或一个数据窗口的句柄。
    当我们在使用完一个代理对象后应注意在程序的结束前用destro
y语句析构这个对象实例,否则将出现我们在第13期曾经讨论过的内存
漏洞(memory leak)问题。 而这一点在分布式中尤为重要。因为对代
理的析构将使远端的不可视对象同时析构。如果忘记了对代理对象的
析构,不可视对象将不会在服务器端自动清除,这样将在客户和服务器
两端都造成内存漏洞。 此外connection对象还有一个DisconnectSer
ver函数,这个函数用以取消客户与服务器的连接。服务器端将回收分
配给该用户的内存,在程序结束时不使用这个函数也将造成服务器端
的内存漏洞。在客户端产生了内存漏洞也许并不会造成多么恶劣的影
响,在服务器端有一个10K左右的漏洞可能也算不得什么,但是如果每
一次客户调用NVO函数都造成10K的漏洞一个客户机每天有100次的调
用,这个服务器如连接了100个客户机,那么一天之内就会造成02.4M
的内存漏洞,这足以使任何强壮的服务器崩溃。

    开发分布式应注意的问题
    ·在本地进行分布式设计
    我们在做数据库模型设计时,首先设计的是实体与实体之间关系,
我们将不考虑每一个表、每一个字段的具体实现,这时我们称之为概
念设计阶段,然后再考虑其物理实现。同样我们在设计分布式应用时
也应首先考虑在本地上的实现,如过早地考虑网络的拓扑模型将会使
分布式应用失去未来重新分割应用的灵活性。应用在分布运行之前首
先应当在本地成功运行使用Debug调试必须使用本地的接口。
    ·同产品相同的开发环境
    当开发环境与实际交付用户运行的环境有显著差别时,会使得这
个应用在成为产品时分布式应用部分根本不可用。例如,一个在小型
的高速局域网环境中开发出来的应用,如工作在一个拨号网络或一个
广域网中,也许就不会像期望的那样有理想的运行效果。
    ·使网络通讯量最小化
    在物理对象设计和实现过程中,最基本的目标是减少分布式应用
中代理之间的消息和代理对象的传递。函数调用、对远过程对象中实
例变量的引用、触发远过程对象的事件等操作都要比引用本地对象花
费更多的时间。
    ·PowerBuilder对象库的分布
    一般建议在开发时,将不可视对象及其代理对象放在同一个pbl库
中,这个库都包括在客户端应用和服务器端应用可搜索到路径中。这
样在对象被修改后,运行时两端的应用就可以使用同一个DLL或PBD。
    ·同时检入和检出NVO及其代理对象
    在团队开发中,一个程序员检入(check in)NVO时,应当同时检入
它的代理,即使不打算修改这个对象的接口函数。PowerBuilder在保
存NVO对象时,会同时重新修改保存在同一个pb库中的这个对象的代理
,因为代理对象不仅带有接口函数的信息,还包括了对象的实例变量等
其它信息在内。
    ·建立一个远程控制机制
    在一般情况下,应开发一个应用服务器的远程设置,控制新用户连
接、启动、关闭和其它日常任务维护功能,以便于管理员对应用服务
器的管理

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店