Database 版 (精华区)

发信人: zhaowei (小燕子), 信区: Database
标  题: 16.3 分布式PowerBuilder工作流程
发信站: 紫 丁 香 (Fri Jun 11 17:35:21 1999), 转信

下面,我们用例子来回顾一下分布式PowerBuilder的工作流程。假设有两个客户机,一
个服务器。在每一个客户机中,分别有一个客户端应用程序在运行。在服务器中,有一
个服务端应用程序为这两个客户程序提供服务。
    我们首先初始化一个Transport对象,并把它启动起来。接下去来看看如何实现分布
式计算。
第一步,客户机1调用ConnectToServer函数。当这个函数返回后,先检查一下它的返回
值,如果不出意外,Connection对象就被初始化完成了(图16-1)。

图16-1
    接着,ConnectToServer函数在服务端中创立了一个客户虚拟机。客户端每调用一次
这个函数,服务端就为它开辟一块内存,一个独立的工作环境。它可以想象成服务端开
启了一个新的线程,或新的进程(图16-2)。

图16-2
然后,代理对象调用SetConnect函数,为代理设置Connect对象。    Connect对象通过
网络线传递给Transport对象一个链接消息。Transport正在用Listen函数侦听这个
消息,于是在服务端中初始化了NVO对象。注意,我们不直接在服务端中初始化NVO对象,
而是通过代理对象来初始化(图16-3)。


图16-3
随后,这两个客户机在服务器中创立了两个服务线程,它们相互独立,各有两个不同的
内存区域,不同的工作环境。因此,当一个服务线程发生运行错误时,不会影响另外一个
服务线程。这两个服务线程其实就是服务器中同一个NVO的两个拷贝(图16-4)。

图16-4

    在NVO计算完成后,就把结果返回,客户端的应用程序重新得到控制权。我们称之为
同步函数调用。
    在客户应用程序结束后,我们还需要把对象给释放掉。在PowerBuilder中,如果不释
放这些对象,在程序运行结束后,为下一次运行的可分配的内存就会减少。一般情况下,
系统会自动释放对象所占的内存,但象NVO这样的对象是需要应用程序为它释放的。每当
我们释放了一个代理对象,这个代理对象在服务对象所应用NVO也会自动释放。如果不释
放这个代理对象,对应NVO也不会被自动释放。
    最后,客户端的Connect对象调用DisConnectServer函数,断开与服务器的链接。服
务器接收到断开链接的消息后,就会中止由ConnectToServer所创立的服务线程,把这个
线程所占的内存区域释放掉。至此为止,一个完整的分布式计算就完成了。
 

--
________________________________________________________________
 我和一个朋友去散步,遇见一个漂亮的少妇带着一个小孩平时极腼腆的朋友一改
平日恹恹睡态,勇敢的走上前去, ∴
         《||||||||||||||||||||■※※◎    亲切的看着那小孩说:
                               ∵    ."   多可爱的孩子啊,
                                 ...''   抬头看看少妇,“还有孩子他妈!”

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.226.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.102毫秒