摘要:本文对传统的C/S结构和基于多层客户/服务器体系作了一个分析。并在PB中如何实现 基于多层客户/服务器体系作了详细说明。同时对同步通信和异步通信作了比较,并对服务器推送技术作了简要说明,给出了其结构图。
关键词:PowerBuilder,同步通信,异步通信,C/S,中间件(MIDDLEWARE),远程对象,(PROXY)代理对象,CONNECTION(连接对象):
1 前言
在实际应用中,对于一些大型应用系统来说,应用程序的业务逻辑比较复杂,如果应用系统采用了传统的客户/服务器体系结构,把业务逻辑过分集中与客户端,会使客户端负荷过重。此外一旦把一些业务逻辑有所变动,必须将所有客户端的应用程序都加以改动,这样会导致应用分发的困难,一个有效的解决方案就是将应用的逻辑结构进行合理的分布,采用N—层的体系结构。这种体系结构把客户端应用分为两部分:客户应用、服务器应用。客户应用是原来客户应用的一部分,原来的客户应用中的另一部分被移入服务器应用中,新的客户应用负责用户界面和简单固定的业务逻辑,新的服务器应用中驻留核心的易变的业务逻辑。
2 在PowerBuilder中的分布式技术
典型的分布式PowerBuilder应用系统由两部分构成:
1) 服务器应用:实现事务逻辑,为客户提供服务。
2)客户应用:建立用户界面,与用户进行交互。同时需要调用服务器提供的事务逻辑。
其中服务器应用包括两部分:
1) 远程对象:建立应用的事务逻辑。
2) TRANSPORT(传输对象):用于监听客户请求。
客户应用由三部分构成:
1) 用户界面:与用户进行交互。
2) PROXY对象:服务器应用在客户端的代理。
3) CONNECTION(连接对象):用于建立与服务器应用的连接。
分布式应用的结构及各部分之间的相互关系如下图所示:
2.1 服务器应用
1) 远程对象
在分布式应用中,客户应用使用应用服务器中远程对象提供的服务。远程对象驻留在应用服务器中,含有完成事务逻辑的功能、方法,是PB中的定制类的用户对象。在分布式应用系统中,客户应用可以象使用本地对象一样调用远程对象。
客户端可以采用两种方法调用远程对象:
1) 同步调用
2) 异步调用
采用同步调用时,处理过程是同步的,客户发出请求,服务器立即响应,并进行处理。客户端在此期间任何事件不会被触发,直到服务器完成处理。
采用异步调用时,服务器将客户调用,派入客户请求队列的末尾,客户端在此期间可以继续自己的任务,服务器的处理不会影响客户的进程。在对实时性要求不高的情况下,考虑采用此调用。
2) TRANSPORT(传输)对象
服务器通过传输对象接受客户的连接并处理客户向服务器的请求。传输对象必须在服务器应用程序中实例化。传输对象中包含了一系列属性,这些属性定义了关于服务器的信息。
2.2 客户应用
1) 用户界面
提供与用户进行交互的场所。
2) PROXY对象
类似服务器应用中远程对象在客户端的映像。它具有与服务器远程对象相同的名字。
3) CONNECTION对象
作用是完成客户端与服务器的连接,请求服务。它同传输对象一样具有一系列属性这些属性定义了关于客户端的信息。如驱动程序等。
3 分布式应用设计和实现
3.1 服务器端
3.1.1建立服务器应用
使服务器开始监听客户连接请求的具体步骤:
1) 将TRANSPORT(传输)对象实例化。
2) 为TRANSPORT(传输)对象设置属性。
3) 用LISTEN函数开始监听。
4) 异常处理。
代码如下:
transport tp1
long err
tp1=Create Transport 对象实例化
tp1.driver=”winsock” 驱动程序
tp1.application=”10000” 端口号
err=tp1.Listen() 开始监听
If err<>0 Then 异常处理
MessageBox(“启动服务出错”,err)
Else
MessageBox(“服务正常”)
End If
3.1.2建立远程对象
远程对象定义了客户要访问的业务逻辑,它是分布环境下开发的重点。由用户针对不同需要进行开发。
3.2 客户端
3.2.1建立客户连接
建立客户应用与服务器应用连接的具体步骤:
1) 将CONNECTION对象实例化。
2) 将CONNECTION对象设置属性。
3) 用CONNECTTOSERVER进行连接。
4) 异常处理。
代码如下:
connection cc1
long err
cc1=Create Connection 对象实例化
cc1.driver=”winsock” 驱动程序
cc1.application=”10000” 端口号
cc1.location=”220.200.200.1” 服务器地址
err=cc1.ConnectionToServer() 进行连接
If err<>0 Then 异常处理
MessageBox(“连接出错”,err)
Else
MessageBox(“连接正常”)
End If
3.2.2用户界面
针对不同需要进行界面开发。
3.2.3 PROXY对象
在与服务器建立连接后,客户端就可以建立一个服务器远程对象的代理(PROXY对象),并且使用它的全部内容。PROXY对象是客户应用与远程对象的一个接口。
客户端使用远程对象的代理——PROXY对象,在客户与服务器之间增加了一个中间层,可以防止用户随意使用业务逻辑,增加了安全性。
示意代码如下:
string code,name
u_remote aname
gconn_xt.CreateInstance(aname) 对象实例化
If IsValid(aname) Then
code =sle_1.text
name=anmae.uf_getname(code) //调用远程对象的函数uf_getname()
st_1.text=name
End If
4 异步通信和服务器推送技术
4.1 异步通信
服务器对客户请求的响应可以采用同步和异步方式。前面介绍的是同步方式进行的。优点是实时性高,因此,在实时性要求高的情况下,考虑采用此调用。
异步通信优点是不会影响客户对其它程序的运行。因此在对实时性要求不高,客户运行任务多的情况下,考虑采用此调用。
为了通知服务器采用哪种方式处理,在客户应用程序调用服务器提供的函数时以关键字说明:
TRRIGER(缺省) 同步方式
POST 异步方式
如:
anmae.
uf_getname(code) 同步方式调用服务器应用函数等价于
anmae.TRRIGER uf_getname(code)
异步方式调用
anmae.POST uf_getname(code)
4.2 推送技术
通常的处理方式是由客户应用向服务器发出请求,由服务器处理客户请求。采用服务器推送技术,则服务器也可以向客户发送请求。特别在客户采用异步方式请求服务器提供服务,而又希望了解服务器的处理情况,可以采用服务器推送技术。
基本逻辑结构如下图:
5、结束语
本文介绍了分布式多层体系结构,及在PB中的设计和实现,最后还介绍了同步和异步通信技术和推送技术。有了这些技术,就可以开发一个更加安全、高效的分布式应用程序。