薛蕾
(江蘇省電力公司電力科學(xué)研究院,江蘇 南京 211103)
在能量管理系統(tǒng)中,服務(wù)子系統(tǒng)WebS是1個極其重要的子系統(tǒng)。電力系統(tǒng)軟件規(guī)劃者人為地將能量管理系統(tǒng)劃分并要求部署在3個安全分區(qū)中[1]。其中Ⅰ區(qū)作為實時運行信息區(qū),安全要求級別最高。Ⅲ區(qū)作為安全級別更低的安全區(qū)域,部署服務(wù)子系統(tǒng)WebS,進(jìn)行信息的發(fā)布以及與其他非實時應(yīng)用的信息交互。從1990年代開始,各個能量管理系統(tǒng)都已具備各自的Web服務(wù)功能,并且不斷發(fā)展。期間對如何設(shè)計與開發(fā)好服務(wù)子系統(tǒng)WebS發(fā)生過多次的技術(shù)爭論,實現(xiàn)方法在各具體產(chǎn)品中也有相當(dāng)大的區(qū)別,其展現(xiàn)效果也有巨大的差異。這些方法大都由于當(dāng)時的計算機技術(shù),包括通信技術(shù)、瀏覽器技術(shù)等的限制,都或多或少地存在一些缺陷。近年來,先進(jìn)的計算機技術(shù)不斷涌現(xiàn),技術(shù)環(huán)節(jié)的銜接手段與方法也在不斷改進(jìn),為改進(jìn)能量管理系統(tǒng)服務(wù)子系統(tǒng)WebS的設(shè)計提供了可能。
基于C/S模式的Web客戶端采用各種高級語言進(jìn)行編寫,編譯后通過文件發(fā)布服務(wù)將程序發(fā)布并更新到客戶端。用戶直接使用發(fā)布到客戶端的執(zhí)行程序進(jìn)行瀏覽與操作。Web的信息發(fā)布功能可根據(jù)要求靈活配置,比如圖形瀏覽、曲線查詢、告警瀏覽、報表查詢等功能均可通過Web的更新發(fā)布機制提供給客戶端。如圖1所示,Web服務(wù)器上需要部署基本的網(wǎng)頁發(fā)布服務(wù)、實時數(shù)據(jù)服務(wù)、歷史數(shù)據(jù)服務(wù)和網(wǎng)絡(luò)通信服務(wù)等基本服務(wù)程序。Web客戶端通過網(wǎng)頁發(fā)布機制將相關(guān)程序和資源緩存到本地,再通過主網(wǎng)頁提供相關(guān)模塊的鏈接進(jìn)行程序的調(diào)用。由于客戶端直接采用現(xiàn)有的圖形程序進(jìn)行部署,所以原有的實時數(shù)據(jù)服務(wù)、歷史數(shù)據(jù)服務(wù)、告警查詢服務(wù)等都可以直接使用。
圖1 基于C/S模式的Web架構(gòu)
基于B/S模式的Web架構(gòu)與基于C/S模式的Web架構(gòu)不同,其主要利用瀏覽器對腳本語言的支持能力,實現(xiàn)瀏覽器與服務(wù)器之間的HTTP請求與響應(yīng),將大量的應(yīng)用邏輯處理放在服務(wù)器端進(jìn)行處理。相對于C/S模式而言是一個非常輕量級的客戶端展示方式。
B/S模式下最簡單的Web應(yīng)用程序模型為同步模型,即輸入數(shù)據(jù),發(fā)送頁面到服務(wù)器,等待響應(yīng),如圖2所示。這里存在著2個基本的問題:一是必須等待服務(wù)器的響應(yīng);二是服務(wù)器不能發(fā)起更新。
圖2 基于B/S模式的Web同步模型
為此,異步模型則更加吸引人。在異步模型中,應(yīng)用程序不會讓所有的客戶端操作響應(yīng)都回到服務(wù)端去處理,而是部分變化由客戶端處理,部分響應(yīng)由服務(wù)端處理的技術(shù)方法。這個模型中所交互的網(wǎng)頁即不是所有信息的全集,也不是僅有顯示的部分頁面,在使用過程中,只有包含新信息的用戶界面元素才會被更新,其余部分都保持不變。這就意味著不需要發(fā)送全部的信息,不需要長時間等待響應(yīng),如圖3所示。
圖3 基于B/S模式的Web異步模型
基于C/S模式的服務(wù)子系統(tǒng)WebS可以實現(xiàn)作為一個服務(wù)子系統(tǒng)WebS所要實現(xiàn)的各項基本功能要求,包括圖形瀏覽、告警查詢、報表瀏覽等功能。而且由于采用實時系統(tǒng)的應(yīng)用程序直接作為Web客戶端程序發(fā)布,其功能非常的強大且交互性強。但是基于C/S結(jié)構(gòu)的方式有明顯的缺點。
(1)客戶端需要下載。對于每一個客戶端,都需要下載客戶端程序和相關(guān)的配置與圖形文件到本地。這一過程會導(dǎo)致一些問題:①下載時間長;②對磁盤空間有要求,在某些系統(tǒng)上需要500 MB甚至1 GB以上的空間;③磁盤上的文件一旦下載,清除困難,導(dǎo)致存在垃圾文件;④可能存在安裝失敗的情況,異常處理復(fù)雜。
(2)程序更新復(fù)雜。任何的修改都需要向客戶端進(jìn)行發(fā)布,部分發(fā)布就有可能帶來匹配問題
(3)客戶端軟件沖突。當(dāng)同一客戶端瀏覽多個Web服務(wù)器可能會發(fā)生客戶端軟件沖突。
(4)對瀏覽器安全策略有要求。由于需要允許下裝控件,要求瀏覽器降低安全權(quán)限和可信站點進(jìn)行配置,不符合安全防護(hù)的功能要求,同時也要求使用Web客戶端的使用者需要手動的進(jìn)行操作,增加了技術(shù)支持人員的工作量。
(5)網(wǎng)絡(luò)設(shè)備需要維護(hù)。網(wǎng)絡(luò)上要開放數(shù)個通信端口以供應(yīng)用程序通信。而由于系統(tǒng)中網(wǎng)絡(luò)結(jié)構(gòu)往往比較復(fù)雜,跨越多個交換機和路由器的情況時有發(fā)生,一旦出現(xiàn)訪問異常,很難確定是問題原因。且隨著安全防護(hù)要求的不斷增加,開放的端口越少越好。
(6)對網(wǎng)絡(luò)帶寬要求比較高。由于使用客戶端程序直連,為加快操作與交互的速度,大量初始信息會提取到客戶端進(jìn)行邏輯分析,而非最終的結(jié)果發(fā)布,導(dǎo)致對網(wǎng)絡(luò)帶寬的要求增加。
(7)對服務(wù)器性能要求比較高。由于每一個客戶端的登陸、瀏覽都要消耗服務(wù)器一些資源,導(dǎo)致服務(wù)器的負(fù)載較高。因此C/S客戶端方式支持的在線人數(shù)不多。
①志愿助人服務(wù):門診服務(wù)中心、門診各樓層志愿者負(fù)責(zé)協(xié)助病人自助掛號、繳費、打印化驗單;急診分診處志愿者負(fù)責(zé)維護(hù)醫(yī)療工作秩序;門診B超室志愿者負(fù)責(zé)協(xié)助醫(yī)務(wù)人員登記,分流引導(dǎo)病人及家屬到相應(yīng)就診樓層和診室檢查。②志愿關(guān)懷服務(wù):積極為殘疾、老年、體弱、行動不便及其他特需病人、外國友人等提供諸如攙扶、陪同、輪椅、拐杖、平車協(xié)助的優(yōu)質(zhì)服務(wù);幫助危重癥、老年、體弱病人辦理住院手續(xù)并陪送至病房;主動、熱情地為病人及家屬提供指路、引導(dǎo)服務(wù)。③志愿環(huán)衛(wèi)服務(wù):維持安靜、清潔、整齊、安全、良好的醫(yī)院環(huán)境;協(xié)助護(hù)工清理病人就診途中的分泌物、排泄物、嘔吐物等,為病人提供舒適、優(yōu)質(zhì)的醫(yī)療服務(wù)。
正是由于基于C/S模式的服務(wù)子系統(tǒng)WebS存在著種種的缺陷,新的服務(wù)子系統(tǒng)模式的研究就顯得十分重要。需要解決的問題:(1)下載內(nèi)容盡量少,甚至零下載,即不落地的Web;(2)開放端口盡量少,最好只開放標(biāo)準(zhǔn)的8000端口;(3)服務(wù)器資源占用量盡量少,允許更多的訪問用戶;(4)客戶端對服務(wù)器的訪問相對獨立,即一個客戶端可瀏覽多個Web服務(wù)器上的內(nèi)容;(5)客戶端是免維護(hù)的。
而基于B/S模式的服務(wù)子系統(tǒng)WebS正好在這方面具有得天獨厚的優(yōu)勢。其客戶端包含HTML頁面和嵌入的腳本,這些內(nèi)容是不落地的;正常瀏覽僅需開發(fā)一個標(biāo)準(zhǔn)的HTML端口(8000)或一個指定發(fā)布端口;服務(wù)器可以采用Servlet容器支持并發(fā)的頁面訪問,效率極佳;客戶端對服務(wù)器的訪問完全對立,一個客戶端可以任意瀏覽多個Web服務(wù)器的內(nèi)容,而且客戶端是免維護(hù)的。但是基于B/S模式的服務(wù)子系統(tǒng)WebS依賴HTML頁面的展現(xiàn)和嵌入的腳本處理能力,其功能和交互特性與C/S模式下的客戶端相比要遜色不少。
如前所述,基于B/S模式的Web構(gòu)架較基于C/S模式的Web構(gòu)架具備很多的優(yōu)勢,而W3C發(fā)布的SVG語言規(guī)范,以及異步模式技術(shù)Ajax(Asynchronous JavaScript and XML)為構(gòu)建這種架構(gòu)的服務(wù)子系統(tǒng)提供了技術(shù)支撐?;谶@一思考,研究設(shè)計基于B/S模式的適合電力能量管理系統(tǒng)使用的服務(wù)子系統(tǒng)WebS架構(gòu)方案。在本方案中,SVG/XML是信息的主要載體,而HTTP服務(wù)器的搭建與Ajax技術(shù)的使用則是本設(shè)計方案的主要研究內(nèi)容。
基于B/S模式的Web異步模型有3個重要的環(huán)節(jié),如圖4所示。(1)Web服務(wù)器側(cè)的HTTP服務(wù)器的搭建與服務(wù)提供;(2)瀏覽器側(cè)的展示技術(shù)。(3)異步腳本通信與頁面更新。
圖4 基于B/S模式的服務(wù)子系統(tǒng)WebS構(gòu)架
SVG的開放性、高效性、靈活性、可擴(kuò)展性和可交互性等多方面特性使其具備了成為該系統(tǒng)中承載模型與圖形表達(dá)以及交互展示的能力[2]。SVG將矢量圖形的表達(dá)技術(shù)引入,使SVG文件很小,下載瀏覽更加便捷,而且采用客戶機本地解釋生成圖形的方式,既充分利用了客戶機的資源,又減輕了服務(wù)器端的負(fù)擔(dān),可以解決網(wǎng)絡(luò)瓶頸問題[3-5]。由于SVG是解釋性語言,所以在瀏覽時遇上很大的圖形文件,可以以圖形元素為單位,接收多少,顯示多少,類似與JPEG的漸進(jìn)顯示。SVG/XML既是一種語言,也是一種技術(shù)。作為一種語言,它具有易讀、可校驗、方便修改等特性;作為一種技術(shù),它為計算機領(lǐng)域提供了一種標(biāo)準(zhǔn)化的信息載體,方便地進(jìn)行信息的共享與交互[6,7]。加之大量業(yè)界廠商對SVG/XML作為主流格式的文本載體進(jìn)行支持,大大擴(kuò)展并提高了其解析能力、校驗?zāi)芰?、傳輸能力?/p>
服務(wù)子系統(tǒng)WebS利用Ajax完成請求發(fā)送并取回必需的數(shù)據(jù),并在客戶端采用JavaScript處理來自服務(wù)器的響應(yīng)。因為在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,應(yīng)用響應(yīng)得更快。同時很多的處理工作可以在發(fā)出請求的客戶端機器上完成,所以Web服務(wù)器的處理時間也減少了。此方案的最大優(yōu)點,就是能在不更新整個頁面的前提下維護(hù)數(shù)據(jù)。這使得WebS的客戶端更為迅捷地回應(yīng)用戶動作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變過的信息。
服務(wù)子系統(tǒng)WebS利用JavaScript來傳遞用戶界面上的數(shù)據(jù)到服務(wù)端并獲取結(jié)果。XMLHttpRequest對象用來響應(yīng)通過HTTP傳遞的數(shù)據(jù),一旦數(shù)據(jù)返回到客戶端就可以立刻使用DOM將數(shù)據(jù)修改到基于SVG的網(wǎng)頁上。XMLHttpRequest對象在大部分瀏覽器上已經(jīng)實現(xiàn)而且擁有一個簡單的接口允許數(shù)據(jù)從客戶端傳遞到服務(wù)端,但并不會打斷用戶當(dāng)前的操作。使用XMLHttpRequest傳送的數(shù)據(jù)可以是任何格式,而在本文的研究設(shè)計中采用了基于XML的SVG數(shù)據(jù)格式。
前端展示的圖形頁面選擇SVG作為嵌入對象,在載入靜態(tài)畫面后,需要結(jié)合實際應(yīng)用系統(tǒng)的數(shù)據(jù)變化進(jìn)行網(wǎng)頁畫面的動態(tài)更新。如前所述,其數(shù)據(jù)請求由JavaScript腳本函數(shù)通過XMLHttpRequest對象組織發(fā)出,當(dāng)數(shù)據(jù)返回后,數(shù)據(jù)的刷新依賴則是文檔對象模型DOM來完成。
DOM可以看作是一組應(yīng)用程序接口API,它把HTML文檔、XML文檔等看成一個文檔對象,在接口里面存放的是對這些文檔操作的屬性和方法的定義,若編程語言實現(xiàn)了這些屬性和方法,就可以對文檔對象中的數(shù)據(jù)進(jìn)行存取,并且利用程序?qū)?shù)據(jù)進(jìn)行進(jìn)一步的處理。由于DOM是基于信息層次的,因而DOM被認(rèn)為是基于樹或基于對象的。通過DOM接口,應(yīng)用程序可以是任何時候范圍XML文檔中的任何一部分?jǐn)?shù)據(jù)。SVG也是基于XML的,所以與DOM也有著密切的關(guān)系。
服務(wù)子系統(tǒng)WebS即通過操縱SVG DOM來與SVG圖形進(jìn)行交互。當(dāng)瀏覽器利用DOM載入了SVG文件后,就會在內(nèi)存中按照SVG DOM構(gòu)造一棵節(jié)點樹。通過遍歷DOM樹,可以獲取畫面的請求數(shù)據(jù)集,并通過異步數(shù)據(jù)訪問進(jìn)行實時數(shù)據(jù)的獲取。在數(shù)據(jù)返回后,利用DOM將解析的數(shù)據(jù)內(nèi)容逐個的更新修改節(jié)點樹上的相應(yīng)節(jié)點,實現(xiàn)畫面數(shù)據(jù)的動態(tài)刷新、狀態(tài)著色、電氣島著色等展示功能,讓靜態(tài)的圖形動起來。具體流程如圖5所示。在這一過程中,所有的軟件操作都是基于內(nèi)存中的DOM節(jié)點樹,原始的SVG文件不會發(fā)生任何變化。
圖5 SVG數(shù)據(jù)轉(zhuǎn)換流程
對動態(tài)數(shù)據(jù)(如:量測量等)的處理,可以利用DOM(文檔對象模型)接口操縱SVG文檔來實現(xiàn)數(shù)據(jù)的動態(tài)刷新。通過腳本語言定時調(diào)用文檔對象模型的接口,獲得畫面上所有元素及其屬性和屬性值,通過DOM方式將整個XML表述的SVG格式的圖形文件映射到內(nèi)存中。內(nèi)存中每個對象中屬性值的變化可以通過訂閱機制向服務(wù)端定制。
例如開關(guān)設(shè)備的動態(tài)變化可以通過JavaScript腳本來實現(xiàn)。(1)申明g_svgDoc為SVG的文檔對象,g_svgRoot為根節(jié)點;(2)定位到指定的節(jié)點;(3)修改use節(jié)點的屬性,引用該節(jié)點的不同狀態(tài)。
類似的,動態(tài)數(shù)據(jù)也可以進(jìn)行修改。(1)申明g_svgDoc為SVG的文檔對象,g_svgRoot為根節(jié)點;(2)定位到指定的節(jié)點;(3)修改文本節(jié)點的值。通過這些步驟就可以簡單地表達(dá)對指定節(jié)點進(jìn)行的修改。
數(shù)據(jù)的獲取則是實現(xiàn)的另一個關(guān)鍵。目前采用了Ajax技術(shù)來實現(xiàn)。比如上述SVG文件可以通過如下步驟來獲取數(shù)據(jù)。(1)創(chuàng)建Ajax請求對象;(2)將所有的key_id信息拼接起來字符串方式發(fā)送給SvgDataServlet程序。數(shù)據(jù)信息的請求發(fā)給服務(wù)器端的 Java Servlet程序 (SvgDataServlet), 該程序在doPost方法中負(fù)責(zé)解析請求,并進(jìn)一步將key_id通過CORBA發(fā)送給后臺服務(wù)獲取系統(tǒng)數(shù)據(jù),數(shù)據(jù)獲取之后返回給Web客戶端,客戶端收到結(jié)果之后自動調(diào)用回調(diào)函數(shù)進(jìn)行數(shù)據(jù)的刷新。以上的處理流程如圖6所示。
圖6 數(shù)據(jù)刷新的處理流程
本文針對基于C/S模式與基于B/S模式構(gòu)架進(jìn)行服務(wù)子系統(tǒng)WebS的搭建進(jìn)行優(yōu)缺點比較,發(fā)現(xiàn)實現(xiàn)一套基于B/S模式架構(gòu)的服務(wù)子系統(tǒng)WebS顯得尤為重要。且利用多種計算機技術(shù)提出并實現(xiàn)了一套完整的基于B/S模式架構(gòu)的設(shè)計方案。首先,對服務(wù)子系統(tǒng)WebS的系統(tǒng)架構(gòu)進(jìn)行分析,并對幾種常用的系統(tǒng)設(shè)計模式進(jìn)行比較,提出了基于B/S模式架構(gòu)實現(xiàn)服務(wù)子系統(tǒng)WebS的設(shè)計方案。其次,通過選取Servlet容器技術(shù)搭建HTTP服務(wù),以W3C標(biāo)準(zhǔn)SVG作為前端展示語言與格式,并利用Ajax技術(shù)實現(xiàn)客戶端與服務(wù)器的通信,從而建立瀏覽器與服務(wù)器之間的異步訪問模型。最后,結(jié)合異步訪問模型,建立服務(wù)子系統(tǒng)WebS的服務(wù)實現(xiàn)機制,對前端展示所必須的數(shù)據(jù)刷新服務(wù)、事件響應(yīng)等進(jìn)行了詳細(xì)的研究設(shè)計。
[1]蔣元晨,潘正鈺.電力管理信息系統(tǒng)中圖形的Web發(fā)布[J].電力系統(tǒng)自動化,2003,27(18):61-64.
[2]秦 華,高毅雄,王康元.能量管理系統(tǒng)中圖形SVG導(dǎo)出的實現(xiàn)[J].繼電器,2006,34(8):70-72.
[3]黃凱偉.SVG開發(fā)實踐[M].北京:電子工業(yè)出版社,2008.
[4]李亞平,姚建國,黃海峰,等.SVG技術(shù)在電網(wǎng)調(diào)度自動化系統(tǒng)中的應(yīng)用[J].電力系統(tǒng)自動化,2005,29(23):80-82.
[5]劉 嘯.基于XML的SVG應(yīng)用指南[M].北京:北京科海電子出版社,2001.
[6]石東源,盧炎生,王星華,等.SVG及其在電力系統(tǒng)軟件圖形化中的應(yīng)用初探[J].繼電器,2004,32(16):37-40.
[7]劉遵雄,況志軍,高玉柱.基于SVG的電力圖形系統(tǒng)的實現(xiàn)[J].繼電器,2005,33(21):69-73.
[8]阿斯利森,舒 塔.Ajax基礎(chǔ)教程[M].金 靈譯.北京:人民郵電出版社,2006.