鄭 玲,鄭曉天
(華北電力大學(xué),北京 102206)
隨著社會(huì)的進(jìn)步和技術(shù)的發(fā)展,當(dāng)今電力系統(tǒng)規(guī)模不斷擴(kuò)大,日趨復(fù)雜,運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù)急劇增加。為了便于工作人員更有效地進(jìn)行管理,更具有針對(duì)性地解決出現(xiàn)的問(wèn)題,能夠直觀地顯示系統(tǒng)中各類數(shù)據(jù)的可視化技術(shù)應(yīng)運(yùn)而生。
實(shí)時(shí)數(shù)據(jù)展示作為可視化技術(shù)中的核心部分,是管理人員最為關(guān)心的對(duì)象。它反映了電力系統(tǒng)的實(shí)時(shí)運(yùn)行狀態(tài),通過(guò)對(duì)這些數(shù)據(jù)的監(jiān)測(cè)和分析能夠了解設(shè)備的性能、運(yùn)行狀態(tài)和健康狀況,從而保證整個(gè)電力系統(tǒng)的正常穩(wěn)定運(yùn)行。
對(duì)實(shí)時(shí)性的實(shí)現(xiàn),目前的系統(tǒng)大多使用定時(shí)刷新的方式,將刷新時(shí)間間隔設(shè)置盡可能地小來(lái)模擬實(shí)時(shí)性,并沒(méi)有實(shí)現(xiàn)真正的“實(shí)時(shí)”[1-2]。
因HTTP協(xié)議是無(wú)狀態(tài)的,客戶端與服務(wù)器交互的一般過(guò)程為:客戶端打開(kāi)連接,發(fā)送請(qǐng)求,服務(wù)器處理請(qǐng)求,返回響應(yīng)給客戶端,關(guān)閉連接。如果客戶端有新的請(qǐng)求,則需再打開(kāi)新的連接。
如果用戶要得到較新的數(shù)據(jù),最為傳統(tǒng)的方式即為頁(yè)面定時(shí)刷新。刷新時(shí)間間隔根據(jù)應(yīng)用具體情況而定。因不斷刷新整個(gè)頁(yè)面,該方案會(huì)造成服務(wù)器負(fù)擔(dān)過(guò)重,并且占用大量帶寬,同時(shí)用戶體驗(yàn)也較差。
客戶端定時(shí)發(fā)送一個(gè)Ajax請(qǐng)求,如果有可更新的數(shù)據(jù),則服務(wù)器將數(shù)據(jù)返回到客戶端,之后客戶端通過(guò)DOM操作對(duì)圖像做相應(yīng)修改。該方式只需傳輸部分?jǐn)?shù)據(jù),占用帶寬變小。但客戶端無(wú)法得知服務(wù)器何時(shí)更新了數(shù)據(jù),因此只能設(shè)置一個(gè)固定的時(shí)間間隔,不斷發(fā)送請(qǐng)求,這樣就會(huì)發(fā)送很多不必要的請(qǐng)求。
客戶端發(fā)送一個(gè)請(qǐng)求給服務(wù)器,服務(wù)器會(huì)在一個(gè)設(shè)定的時(shí)間段內(nèi)保持這個(gè)連接為打開(kāi)狀態(tài),如果在這段時(shí)間內(nèi)有新數(shù)據(jù)出現(xiàn),服務(wù)器就會(huì)將新數(shù)據(jù)返回給客戶端;如果在這個(gè)設(shè)定的時(shí)間內(nèi)一直沒(méi)有新數(shù)據(jù)產(chǎn)生,則服務(wù)器在時(shí)間到的時(shí)候返回一個(gè)無(wú)新數(shù)據(jù)的響應(yīng)給客戶端。
長(zhǎng)輪詢相對(duì)于一般輪詢的優(yōu)點(diǎn)在于,一旦有新數(shù)據(jù)產(chǎn)生,便立即從服務(wù)器發(fā)送到客戶端,因此沒(méi)有延時(shí),一定程度上實(shí)現(xiàn)了實(shí)時(shí)性,但它依舊依賴于客戶端的請(qǐng)求,在數(shù)據(jù)交互頻繁時(shí),服務(wù)器端有大量消息要推送,它便與普通輪詢?cè)诒举|(zhì)上變得相同了。
FlashSocket通過(guò)Flash播放器使用指定的端口與服務(wù)器通信,連接在數(shù)據(jù)傳輸完成后不會(huì)關(guān)閉,因此可實(shí)現(xiàn)即時(shí)通信。但FlashSocket依賴于Flash插件,而某些客戶端,比如iPhone/iPad,并不支持Flash。同時(shí)其要求防火墻的843端口是打開(kāi)的,這樣Flash組件才能發(fā)出HTTP請(qǐng)求來(lái)檢索包含域授權(quán)的策略文件。如果客戶端處在代理服務(wù)器的后面的話,到端口843的連接可能會(huì)被拒絕[3-8]。
WebSocket是HTML5規(guī)范中的一個(gè)重要組成部分,是下一代客戶端-服務(wù)器的異步通信方法。它取代了單個(gè)的TCP套接字,使用WS或WSS協(xié)議,實(shí)現(xiàn)了客戶端與服務(wù)器端的雙向通信,使兩者之間可以直接進(jìn)行數(shù)據(jù)的相互傳送。相對(duì)于傳統(tǒng)實(shí)時(shí)數(shù)據(jù)更新方案,WebSocket可極大地減少網(wǎng)絡(luò)流量與延遲。
WebSocket目前正由W3C組織進(jìn)行標(biāo)準(zhǔn)化,已經(jīng)受到Firefox 4、Chrome 4、Safari 5等瀏覽器以及Jetty 7、Tomcat 7、Resin 等服務(wù)器的支持。
在服務(wù)器與客戶端之間,WebSocket的連接是通過(guò)WebSocket協(xié)議在第一次“握手”時(shí)建立的,它同樣使用TCP/IP協(xié)議。WebSocket協(xié)議比較簡(jiǎn)單,客戶端和普通的瀏覽器一樣通過(guò)80或者443端口和服務(wù)器進(jìn)行請(qǐng)求握手,服務(wù)器根據(jù)http header識(shí)別請(qǐng)求類型,若為WebSocket請(qǐng)求,則將請(qǐng)求升級(jí)為一個(gè)Web-Socket連接,握手成功后就進(jìn)入雙向長(zhǎng)連接的數(shù)據(jù)傳輸階段。
客戶端的請(qǐng)求類似如下內(nèi)容:
服務(wù)器端的響應(yīng)類似如下內(nèi)容:
WebSocket的數(shù)據(jù)傳輸是基于幀的方式,使用utf-8編碼模式,客戶端無(wú)需安裝任何插件,即可維持一個(gè)雙向連接。一旦連接建立,WebSocket數(shù)據(jù)幀就能夠以雙通道模式發(fā)送和接收數(shù)據(jù)[11]。
電力系統(tǒng)中實(shí)時(shí)數(shù)據(jù)傳輸一般由圖1所示方式實(shí)現(xiàn)。
圖1 實(shí)時(shí)數(shù)據(jù)傳輸示意圖
實(shí)時(shí)數(shù)據(jù)源(例如SCADA)將實(shí)時(shí)數(shù)據(jù)以單向傳輸?shù)姆绞?,通過(guò)網(wǎng)關(guān)傳入數(shù)據(jù)采集站中。數(shù)據(jù)采集站將數(shù)據(jù)打包成相應(yīng)格式,存入管理系統(tǒng)使用的實(shí)時(shí)數(shù)據(jù)庫(kù)。
為實(shí)現(xiàn)實(shí)時(shí)更新,實(shí)時(shí)數(shù)據(jù)庫(kù)中需要使用觸發(fā)器來(lái)調(diào)用管理系統(tǒng)中數(shù)據(jù)更新相關(guān)的代碼。每當(dāng)數(shù)據(jù)庫(kù)有新數(shù)據(jù)產(chǎn)生時(shí),觸發(fā)器立即調(diào)用更新代碼,將更新數(shù)據(jù)即時(shí)反應(yīng)到系統(tǒng)界面中去,具體實(shí)現(xiàn)方法這里不再贅述。
WebSocket的前后臺(tái)交互過(guò)程如圖2所示。
圖2 WebSocket前后臺(tái)交互圖
Web客戶端(JavaScript代碼,使用Firefox 4瀏覽器):
本文介紹了一種基于WebScoket的電力系統(tǒng)實(shí)時(shí)數(shù)據(jù)更新方案,以代替?zhèn)鹘y(tǒng)的Ajax、FashScoket方式,實(shí)現(xiàn)真正的實(shí)時(shí)更新,降低數(shù)據(jù)流量和網(wǎng)絡(luò)延遲,減輕服務(wù)器負(fù)擔(dān)。
作為下一代的HTML版本,HTML5受到了越來(lái)越多的關(guān)注,其眾多的新特性也必然會(huì)隨著HTML5的普及逐步成為各類B/S架構(gòu)軟件系統(tǒng)的標(biāo)準(zhǔn)。相信在未來(lái),基于WebSocket的Web實(shí)時(shí)通信將得到廣泛應(yīng)用。
[1]黃熙.基于Web的實(shí)時(shí)數(shù)據(jù)監(jiān)控技術(shù)的研究[D].西安:西北工業(yè)大學(xué),2006.
[2]周蓉.電力系統(tǒng)實(shí)時(shí)數(shù)據(jù)管理系統(tǒng)的研究與開(kāi)發(fā)[D].北京:華北電力大學(xué),2003.
[3]劉敏.基于 SVG和Ajax的電網(wǎng)調(diào)度 Web發(fā)布技術(shù)[D].北京:華北電力大學(xué),2010.
[4]張利明,張蕾,尹成群.基于Web-SVG調(diào)度實(shí)時(shí)數(shù)據(jù)的展示[J].電力系統(tǒng)通信,2010,31(11):65-67,72.
[5]劉海林.基于SVG的實(shí)時(shí)數(shù)據(jù)Web發(fā)布系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津大學(xué),2007.
[6]呂海東,陸永林.基于Flex和BlazeDS推技術(shù)實(shí)現(xiàn)Web方式實(shí)時(shí)監(jiān)控系統(tǒng)[J].自動(dòng)化技術(shù)與應(yīng)用,2010,29(1):34-36,40.
[7]阮奇.基于Ajax Push技術(shù)的Web數(shù)據(jù)實(shí)時(shí)更新研究[J].中國(guó)高新技術(shù)企業(yè),2010(9):40-41.
[8]孟強(qiáng).電力系統(tǒng)可視化技術(shù)的研究[J].安徽電力,2010,27(4):78-81.
[9]楊斌,張利欣,章立軍,等.基于SVG的Web遠(yuǎn)程實(shí)時(shí)監(jiān)測(cè)客戶端研究[J].計(jì)算機(jī)應(yīng)用研究,2010,27(6):2144-2146.
[10]李代立,陳榕.WebSocket在Web實(shí)時(shí)通信領(lǐng)域的研究[J].電腦知識(shí)與技術(shù),2010,6(28):7923-7925,7935.
[11]溫照松,易仁偉,姚寒冰.基于WebSocket的實(shí)時(shí)Web應(yīng)用解決方案[J].電腦知識(shí)與技術(shù),2012,8(16):3826-3828.
[12]立偉.認(rèn)識(shí) HTML5的 WebSocket[EB/OL].http://www.cnblogs.com/wei2yi/archive/2011/03/23/1992830.html,2011-03-23.
[13]W3C.The WebSocket API[EB/OL].http://dev.w3.org/html5/websockets/,2012-09-27.
[14]黃曉安,何亮,許寧.使用HTML5 WebSocket構(gòu)建實(shí)時(shí)Web應(yīng)用[EB/OL].http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/,2011-12-15.