【内容提要】传统的数据库应用程序经常采用客户机/服务器结构(即C/S结构)这种结构在技术上已经很成熟了并且应用也很广泛但这种结构的应用系统有其不足之处比如查询结果无法共享即使两个客户发出的请求完全相同也要在服务器上执行两次查询在客户端存储了具有商业价值的查询算法数据库服务器负担过重导致效率低下等如果在服务器和客户机之间再加一个服务器专门用于存储查询算法和临时查询结果则问题就得到了很好的解决一方面不同的客户可以共用临时的查询结果而无须再访问数据库服务器减轻了服务器的负担同时在客户端也看不到作为商业机密的查询算法这就是分布式系统的工作原理本文将介绍如何应用PowerBuilder进行分布式应用程序的开发
一分布式应用程序概述
分布式系统的出现源于传统的C/S结构的若干弊病如效率低安全性差等结合到数据库方面来说全球的DNS(域名解析系统)系统是一个很典型的例子试想如果把全世界所有的域名都集中到一台服务器中来进行管理那服务器肯定会因负载过重而无法正常工作整个互联网也就瘫痪了
在编写C/S结构的数据库应用系统时同样也会遇到这类问题那就是如果客户数量很多数据量又都很大的情况下服务器的负载就会很重而且重复性工作很多因为很多客户发出的查询可能完全相同而服务器却需要一一进行查询同时查询算法存储于客户端这可能不适合一些商业环境因为算法本身可能是需要保密的如果能够在传统的服务器和客户机之间再加一个服务器用于存储查询算法和临时查询结果则以上问题均得到了解决这正是分布式系统的工作原理
二在PB环境下如何进行分布式应用程序的开发
下图是分布式系统的工作原理图
图(一)
首先分布式服务器必须建立与数据库服务器的连接可以通过ODBC接口来实现本文不在叙述下面要讲述客户端如何通过分布式服务器来访问数据
在PB环境下要实现分布式的编程首先在DTS端需要用到两个对象一个TransPort对象和一个不可视的用户对象(Classà CustomNonvisible Object以下简称NVO)其中TransPort对象用于响应客户端的连接请求NVO对象用于和客户端进行实际的数据传输在客户端也需要用到两个对象分别是Connection对象和代理对象(NVOProxy)其中Connection对象用于建立到DTS的连接NVOProxy实际上是与NVO一一对应的它只是NVO的一个代理在客户端通过此代理对象来调用NVO的函数来实现相关功能
以下是TransPort对象和Connection对象的常用属性及方法
TransPort对象
属性
Driver可选的值有四个分别是WinSockNamedPipesOpenClientServer和Local由于Winsock的通用性一般情况下都选择Winsock
Application对于Winsock而言指的是端口号用户可以任意指定但必须大于
方法
Listen()其调用方法是transportListen()即开始监听如果调用成功则返回
StopListening()其调用方法是transportStopListening()即结束监听如果调用成功则返回
Connection对象
属性
Driver与Transport对象相同
Application与Transport对象相同但要注意两者必须一致
LocationDTS的IP地址
方法
ConnectToServer()其调用方法是connectionConnectToServer()即连接DTS如果调用成功则返回显然在调用该函数之前DTS必须处于监听状态
DisconnectServer()其调用方法是connectionDisconnectServer ( )即断开与DTS的连接
CreateInstance()其调用方法是connectionCreateInstance(variable)即建立一个NVO的代理以便调用NVO的相关函数注意在调用该函数之前必须保证客户端已经与DTS建立了连接
对于NVO和NVOProxy对象在DTS中建好NVO后为了在客户端设置其代理可以先在DTS中设置本地代理然后将此代理输出到客户端具体设置方法如下在PB的用户对象画板中在用户对象上点击鼠标右健选择Set Proxy Name输入代理对象的名称并存盘打开PB的Library画板找到刚才保存的代理对象点击鼠标右健并选择Export…将此代理对象保存成文件最后在客户端将此文件导入即可导入以后在客户端就可以通过此代理对象来调用NVO的函数了
PB环境下分布式应用程序的开发(二)