【內容提要】傳統的數據庫應用程序經常采用客戶機/服務器結構(即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環境下分布式應用程序的開發(二)
From:http://tw.wingwit.com/Article/program/SQL/201311/16222.html