PowerBuilder开发分布式计算结构之链接对象和运输对象
15.4 链接对象和运输对象
在PB中,为了实现NVO与代理对象的通讯,引入了两类新的对象,链接对象(Connect Object),运输对象(Transport Object)。
链接对象是运行在客户机上的对象。它驻留在客户端应用程序中,用于与服务器通讯。
Transport Object是运行在服务器上的对象。它驻留在服务端应用程序中,用于服务器与客户机的通讯。
Connection对象与我们所熟悉的事务对象(TransObject)比较类似。数据窗口为了存贮到数据库中的数据,我们首先得定义一个事务对象,让事务对象知道应该与哪一个数据库相链接。类似地,我们先在客户端中建立一些代理,这些代理知道如何与服务端进行通讯。这些通讯信息就存贮在Connection对象中。和事务对象一样,为了区别与不同的服务端程序链接,Connection对象拥有一些属性值。
Connection对象最有主要的三个属性值:驱动程序(driver)、位置(Location)和应用程序(Application)。这里所指的驱动程序是网络通信协议,一般为TCP/IP或Named Pipes。位置指的是服务器名,也就是NVO所在的计算机名;应用程序是在服务器上的所运行的程序,在TCP/IP环境下,它可以是一个端口号。当Connection对象知道这三个基本属性值后,就可以调用链接函数与位于服务器中的相应进程进行通讯了。
这个链接函数叫做ConnectToServer。就象在以前在数据窗口所做的那样,我们用SQLCA来建立与数据库的联系,我们先定义一个连接对象Connection Object,然后调用ConnectionObject.ConnetToServer建立通讯。
和事务对象一样,我们一般需要检查一下Connection对 象的指返回值,看看服务器是否真的正确地链接上了。
我们定义了Connection对象的3个基本属性值来确定服务端应用程序,随后检查返回值,这样就使服务端应用程序和服务端的应用程序可以通讯了。我们可以有多个Connection对象,因此,还应该告诉在驻留在客户端代理对象使用哪一个Connection对象。
再用数据窗口和事务对象作一下比较,我们为了告诉数据窗口应该使用哪一个事务对象,调用了一个函数SetTransObject。与之类似,我们需用SetConnect函数来建立代理对象和Connect对象联系。
就象一个应用程序可以拥有多个数据窗口和不同的数据库建立会话一样,一个客户端程序可以和多个服务端程序进行会话。
再来看看客户端。客户端中存在一些代理,它们是NVO的外部接口对象,代理对象通过函数SetConnect来告诉Connect对象应用程序需要建立与服务器的一个链接,紧接着,Connect对象向ConnectToServer函数所指定的服务器发出链接请求。接下去,让我们来看看Transport 对象。
就象Connection对象一样,Transport对象定义一些服务端程序属性值,然后将服务器打开,这个打开服务端应用程序的函数叫做侦听Listen,接着对Listen函数返回进行检查,看看它是否正确启动。让我们来回顾一下分布式计算的基本流程:首先创立一些NVO,它是进行真正处理应用程序;然后,根据NVO抽象出它接口对象Proxy代理对象;当一个客户端应用程序调用驻留在其中的代理对象时,由代理对象告诉Connect对象;Connect对象通过网络与服务端正在Listening的Transport对象建立联系;最后Transport对象告诉NVO,这个远程的NVO将计算结果返回。
现在,我们把这个分布式对象模型变得稍复杂一些。在PowerBuilder中,一个分布式的服务程序又可以是另外一个服务程序的客户端,这就是所谓的N-tier解决方案。在这种结构中,客户机和服务器建立会话,这个服务器又可以与另一个服务器会话,于是结成一个网状的结构。