在VFP中建立C/S機制

字號:

一、C/S的應(yīng)用形式
    在應(yīng)用中,人們多把C/S的應(yīng)用程序分成兩部分:讓客戶程序駐留在網(wǎng)絡(luò)的前端工作站(一臺微機)上,服務(wù)器處理程序則在網(wǎng)絡(luò)的后臺,其分布結(jié)構(gòu)見圖1。當(dāng)客戶(在工作站上)通過請求的方式提出了所需要的服務(wù)時,服務(wù)器不必關(guān)心客戶程序的功能,只需響應(yīng)請求就行。
    在這種結(jié)構(gòu)中,服務(wù)器的硬件必須具有足夠的處理能力,這樣才能滿足各客戶的要求。
    從概念上看,“服務(wù)器”的含義非常廣泛,數(shù)據(jù)庫服務(wù)器只是其中的一種。數(shù)據(jù)庫服務(wù)器至少應(yīng)提供對數(shù)據(jù)的存取、加工、處理等服務(wù),同時還要提供完善的安全保護及數(shù)據(jù)的完整性等處理,并允許多個客戶同時訪問同一個數(shù)據(jù)庫。因此,客戶可以不用考慮對數(shù)據(jù)的安全、優(yōu)化、完整性等基礎(chǔ)處理,只需專心自己的工作。
    客戶應(yīng)用程序除了向服務(wù)器提出請求外,還要分析從服務(wù)器返回的信息(包括數(shù)據(jù)和指令),并據(jù)此作一些再處理(如向操作者顯示相應(yīng)的數(shù)據(jù)、要求補充輸入一些數(shù)據(jù)等)。
    中介(MiddleWare)是C/S系統(tǒng)中的一種系統(tǒng)軟件,它負(fù)責(zé)鏈接客戶與服務(wù)器??蛻襞c服務(wù)器聯(lián)接的最底層是網(wǎng)絡(luò)的硬件,但對應(yīng)用級的程序員來說,關(guān)心的焦點還是它們在軟件上的通信鏈接。因為C/S的環(huán)境復(fù)雜,而且涉及多種規(guī)程及協(xié)議,所以還必須依靠中介軟件才能有效地降低工作難度。中介軟件能夠把使用者與復(fù)雜的通信規(guī)程、硬件平臺及操作系統(tǒng)隔開,數(shù)據(jù)通過中介在客戶與服務(wù)器間流動,客戶與服務(wù)器通過中介軟件進行平穩(wěn)互訪,這種方式無疑大大降低了編程者的技術(shù)難度及工作量。
    目前已出現(xiàn)了很多有關(guān)中介的標(biāo)準(zhǔn)及軟件,我們在VisualFoxPro上見到的就是ODBC。它處在客戶與服務(wù)器之間,有效地隱蔽了C/S操作的復(fù)雜過程。
    二、設(shè)計C/S系統(tǒng)的基本原則
    這里只考慮客戶與服務(wù)器分別在不同硬件平臺上的C/S系統(tǒng)(即基于網(wǎng)絡(luò)的C/S系統(tǒng)),它們在設(shè)計時應(yīng)遵循以下原則:
    1.盡量讓客戶機完成針對特定用戶的事務(wù)處理
    因為服務(wù)器由多個客戶機共享,如果把每個用戶的特定處理都放在服務(wù)器上,就會增大服務(wù)器的工作量,因而降低其響應(yīng)速度,延長客戶申請的等待時間,所以盡量讓客戶機完成針對特定用戶的事務(wù)處理,目的是為了減輕服務(wù)器的負(fù)擔(dān),提高C/S系統(tǒng)的整體性能。
    2.盡量讓服務(wù)器管理全部的共享資源
    可共享的資源包括數(shù)據(jù)、部分外設(shè)(如掃描儀、打印機等)及基礎(chǔ)服務(wù)處理(如通信),這些都應(yīng)由服務(wù)器來管理,以保證各用戶都能享用。對于共享數(shù)據(jù),由服務(wù)器集中處理還有助于保證數(shù)據(jù)的完整性、一致性和安全性。
    3.盡量減少客戶與服務(wù)器間傳送的數(shù)據(jù)量
    在網(wǎng)絡(luò)間傳送數(shù)據(jù),可能產(chǎn)生數(shù)據(jù)錯誤、丟失、延時、故障等問題。數(shù)據(jù)傳遞得越多,產(chǎn)生的問題、要求恢復(fù)的可能性也就越大。而且網(wǎng)絡(luò)上堆積了大量數(shù)據(jù),必然會降低系統(tǒng)對其他客戶機的反應(yīng)速度,同時影響客戶之間及客戶與服務(wù)器間的通信(通信也是一種共享資源)。所以,減少網(wǎng)絡(luò)中數(shù)據(jù)的傳遞量,有助于保證C/S系統(tǒng)的整體性能。
    4.堅持局部數(shù)據(jù)在局部存儲和管理
    這是為了減少網(wǎng)絡(luò)上的數(shù)據(jù)傳輸量、減輕服務(wù)器的壓力、增強服務(wù)器對請求的響應(yīng),提高C/S系統(tǒng)的總體性能。
    根據(jù)上述原則,在做基于數(shù)據(jù)庫的C/S系統(tǒng)設(shè)計時,可以把接口表示部分(如輸入、輸出界面)放在客戶機上,把數(shù)據(jù)的管理部分(如查詢、存儲、更新、優(yōu)化等)放在服務(wù)器上。對其他處理邏輯,則要根據(jù)具體情況進行分析,例如對于計算密集型的處理,可把計算部分放在客戶機上,而有關(guān)數(shù)據(jù)特性的一般約束處理(如完整性、安全性、一致性等)則可放在服務(wù)器上。
    對于數(shù)據(jù)的分布,也應(yīng)作妥善安排。對于提供給各客戶共享的數(shù)據(jù),應(yīng)放在服務(wù)器上(作為遠(yuǎn)程數(shù)據(jù)來處理);而對于各自的獨用數(shù)據(jù),則應(yīng)放在自己的客戶機上。
    三、VisualFoxPro中建立C/S的機制
    用VisualFoxPro構(gòu)造C/S系統(tǒng)時,用ODBC作中介軟件,由ODBC完成客戶與服務(wù)器間的通信。這時各應(yīng)用程序都通過各自的驅(qū)動程序與數(shù)據(jù)庫相聯(lián),ODBC通過自身的驅(qū)動程序管理器來管理ODBC與驅(qū)動程序間的交互,程序員則可以使用相同的程序調(diào)用來實現(xiàn)與不同數(shù)據(jù)源的通信。
    目前,Windows下的ODBC驅(qū)動程序和驅(qū)動程序管理器均以DDL(動態(tài)數(shù)據(jù)鏈接庫)的形式實現(xiàn)。在VisualFoxPro的ODBC支持下,客戶的應(yīng)用程序可以實現(xiàn)以下功能:
    ①與(遠(yuǎn)程)數(shù)據(jù)庫建立或解除聯(lián)接;
    ②VisualFoxPro可通過當(dāng)前已有的驅(qū)動程序與Oracle7.0、SQLServer、MSParadox等數(shù)據(jù)庫聯(lián)接。其他種類的數(shù)據(jù)庫只要能提供自己的驅(qū)動程序,也能與VisualFoxPro相聯(lián);
    ③對遠(yuǎn)程數(shù)據(jù)庫進行常規(guī)操作(如修改、查詢等),并獲取相應(yīng)的操作結(jié)果;
    ④接收以ANSIError為標(biāo)準(zhǔn)的錯誤信息;
    ⑤對遠(yuǎn)程數(shù)據(jù)庫上的表、記錄、視圖、索引等進行檢測;
    ⑥向各用戶提供統(tǒng)一的登錄界面。
    VisualFoxPro是C/S的前端開發(fā)工具,它通過ODBC對后端數(shù)據(jù)庫進行存取的方法有兩類:SPT(SQLPass-Though)和RemoteViews(遠(yuǎn)程視圖)。SPT提供的函數(shù)類似低級文件函數(shù),用戶可用此直接訪問后端數(shù)據(jù)庫。用戶使用SPT時,需用一組以SQL打頭的函數(shù)來編寫“打開聯(lián)接”、“錯誤檢測”、“命令傳遞”等指令。VisualFoxPro中的視圖有兩種:本地和遠(yuǎn)程,操作時可一視同仁。遠(yuǎn)程視圖在ViewDesigner中創(chuàng)建,這時需說明遠(yuǎn)程數(shù)據(jù)庫中要訪問或修改的“部位”及范圍。當(dāng)這個視圖建立后,我們就可以像使用VisualFoxPro的一個局部表一樣,用“日?!钡腣isualFoxPro命令對其操作。
    訪問后端數(shù)據(jù)庫時,必須先通過聯(lián)接。在VisualFoxPro中,通過聯(lián)接可以創(chuàng)建遠(yuǎn)程視圖,修改其屬性則可以優(yōu)化各部分間的通信。VisualFoxPro中的聯(lián)接有兩種:隱含聯(lián)接和命名聯(lián)接。這里聯(lián)接被當(dāng)作對象來處理,以下是聯(lián)接中常用的一些屬性:
    屬性名內(nèi)容說明
    PassWord聯(lián)接時用的口令
    DataSource通過ODBC所聯(lián)接數(shù)據(jù)源的類型
    PacketSize確定聯(lián)接時所用網(wǎng)絡(luò)數(shù)據(jù)包的大小
    ConnectString用于聯(lián)接注冊的字符串
    Asynchronous確定所用聯(lián)接是同步還是異步
    ConnecName建立游標(biāo)時所用聯(lián)接的名字
    UserID用戶標(biāo)識
    Shared確定聯(lián)接時可否共享
    PatchMode確定批模式
    ……
    在用SPT訪問后端數(shù)據(jù)庫時,必須使用命名聯(lián)接。
    在一般的應(yīng)用中,可以將遠(yuǎn)程視圖與SPT結(jié)合使用??稍诒镜財?shù)據(jù)庫中定義后端數(shù)據(jù)源的遠(yuǎn)程視圖,然后通過Form(或FormSet)對已聯(lián)數(shù)據(jù)源進行日常操作。這是一種簡潔、實用的C/S系統(tǒng)應(yīng)用。