ID #17961

用pb实现多层C/S系统

 1 前言

  在实际应用中,对于一些大型应用系统来说,应用程序的业务逻辑比较复杂,如果应用系统采用了传统的客户/服务器体系结构,把业务逻辑过分集中与客户端,会使客户端负荷过重。此外一旦把一些业务逻辑有所变动,必须将所有客户端的应用程序都加以改动,这样会导致应用分发的困难,一个有效的解决方案就是将应用的逻辑结构进行合理的分布,采用N—层的体系结构。这种体系结构把客户端应用分为两部分:客户应用、服务器应用。客户应用是原来客户应用的一部分,原来的客户应用中的另一部分被移入服务器应用中,新的客户应用负责用户界面和简单固定的业务逻辑,新的服务器应用中驻留核心的易变的业务逻辑。

   2 在pb中的分布式技术

  典型的分布式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中的设计和实现,最后还介绍了同步和异步通信技术和推送技术。有了这些技术,就可以开发一个更加安全、高效的分布式应用程序。


2011-07-02 14:46
阅读:
I'm VC , Just U know Y
本站部分文章来源于互联网,版权归原作者所有。

延伸阅读:

PB通用查询终结版系列文章1-如何编写向导程序

PB公用错误捕获模块的开发

将PB的C/S应用改造成B/S应用

PB中如何实现数据模糊查询

pb数据录入窗口的公用程序