張 玲,張翠肖
(石家莊鐵道大學 信息科學與技術(shù)學院,河北 石家莊 050043)
隨著Internet技術(shù)的不斷發(fā)展,基于HTTP協(xié)議的Web應(yīng)用成為人們從互聯(lián)網(wǎng)上獲取大量信息的主要途徑。傳統(tǒng)基于HTTP協(xié)議的Web應(yīng)用采用的是“請求—應(yīng)答”模式,以客戶端發(fā)出請求,服務(wù)器端響應(yīng)請求的方式工作。而HTTP協(xié)議是無狀態(tài)的,客戶端向服務(wù)器端發(fā)送一次請求就建立一次TCP連接,即客戶端向服務(wù)器端發(fā)送請求,服務(wù)器端處理客戶端發(fā)送的請求并做出響應(yīng),此時TCP連接斷開。當用戶需要獲取新的數(shù)據(jù)時,必須重新建立TCP連接,因此無法將最新的消息及時的傳送給客戶端[1]。現(xiàn)如今對Web應(yīng)用中數(shù)據(jù)的實時性要求越來越高,能夠及時的獲取最新消息的服務(wù)器推送技術(shù)就顯得越來越重要。傳統(tǒng)的基于HTTP協(xié)議的Web應(yīng)用不能滿足客戶的需求,HTML5標準中提出的WebSocket通信協(xié)議提供了一條客戶端與服務(wù)器端的基于TCP的雙向通道,可同時在客戶端與服務(wù)器端傳送數(shù)據(jù),使建立的實時Web應(yīng)用更高效[2]。
服務(wù)器推送技術(shù)的基本思想是在客戶端與服務(wù)器端建立長連接,服務(wù)器端主動將更新的數(shù)據(jù)及時的發(fā)送到客戶端,而不需要客戶端發(fā)送請求。
1.2.1 HTML refresh
最簡單的方法就是HTML refresh,即刷新。原理是不管服務(wù)器端的數(shù)據(jù)是否有更新,客戶端都不停的向服務(wù)端發(fā)送請求,當服務(wù)器端數(shù)據(jù)發(fā)生變化時就可以及時的傳送到客戶端。該方法利用HTML中的<meta>標簽,設(shè)置文件的自動刷新頻率[1]。例如<META HTTP-EQUIV=“Refresh”CONTENT=“3;URL=http://www.baidu.com”>,意思是每隔3s刷新一次百度頁面。
1.2.2 基于插件的服務(wù)器推送技術(shù)
基于插件的服務(wù)器推送技術(shù)可利用的瀏覽器插件有ActiveX、Applet和Flash[1]。推送原理是在客戶端瀏覽器安裝插件,插件在瀏覽器頁面打開的同時被初始化,并與服務(wù)器端建立TCP連接,使用套接口傳送數(shù)據(jù)信息或是使用MRI、CORBA進行遠程調(diào)用,來實現(xiàn)服務(wù)器端向客戶端主動的發(fā)送數(shù)據(jù)。
1.2.3 無插件的服務(wù)器推送技術(shù)
無插件服務(wù)器推送技術(shù)的原理是在HTTP的頭信息中添加Connection屬性,設(shè)置Connection的屬性值為Keep-Alive,建立客戶端與服務(wù)器端的長連接,服務(wù)器會主動的將最新的數(shù)據(jù)及時發(fā)送給客戶端而不需要客戶端向服務(wù)器端發(fā)送請求[3,4]。例如輪詢、長輪詢、Comet。
由上述可知,刷新雖然可以自動發(fā)送請求但刷新的是整個頁面,而我們需要的只是部分數(shù)據(jù),重復(fù)的刷新整個頁面會造成資源的浪費;使用有插件的服務(wù)器推送技術(shù),瀏覽器必須先安裝插件,這樣操作系統(tǒng)和插件的兼容性不同會給用戶帶來很大麻煩;無插件的服務(wù)器推送技術(shù),需要服務(wù)器與瀏覽器建立長連接,當有大量的用戶與服務(wù)器建立長連接,服務(wù)器就喪失了高并發(fā)性[1,3,4]?,F(xiàn)在出現(xiàn)一種基于 WebSocket協(xié)議的服務(wù)器推送技術(shù)可以使服務(wù)器端與客戶端建立雙向通信,解決上述問題。
WebSocket是HTML5定義的一個非常重要的新特性,目的是解決客戶與服務(wù)器間的實時通信,有Web TCP之稱[5]。它通過單一的Socket套接字在客戶端瀏覽器和服務(wù)器端建立全雙工的通信連接,該連接可以及時的將最新數(shù)據(jù)推送到客戶端,并且直到明確關(guān)閉之前一直保持打開狀態(tài)。使用戶能夠僅僅通過網(wǎng)頁就可以實現(xiàn)很多以前必須安裝客戶端才能實現(xiàn)的功能,例如在線聊天應(yīng)用。
WebSocket連接是通過將客戶端與服務(wù)器端之間第一次握手時的HTTP協(xié)議升級到WebSocket協(xié)議,但是其底層使用的還是TCP/IP連接。連接建立后使用標準HTTP的80或443端口進行通信,其參數(shù)格式是“ws://localhost:80/zza/Chat”,ws使用80端口是普通的WebSocket通信協(xié)議,還有這一種wss是安全的 WebSocket通信協(xié)議使用443端口[2,5]。其本質(zhì)是通過HTTP協(xié)議進行握手升級到WebSocket協(xié)議后創(chuàng)建TCP連接,此后服務(wù)器端與客戶端通過此TCP連接進行實時數(shù)據(jù)傳輸。因此,不需要安裝新的硬件或者要求開放新的端口,只要服務(wù)器端和客戶端都能解析 WebSocket協(xié)議,就可以順利地建立WebSocket連接。
如今HTML5得到了很多瀏覽器的支持,例如Firefox、Chrome、Maxthon以及基于IE推出的360瀏覽器、搜狗瀏覽器等。為提高實時 Web系統(tǒng)的實時數(shù)據(jù)處理能力和實時響應(yīng)能力,在實時 Web系統(tǒng)架構(gòu)設(shè)計中使用了 WebSocket協(xié)議的服務(wù)器推送技術(shù),利用了復(fù)雜事件處理技術(shù)對數(shù)據(jù)進行快速處理[6,7]?;赪ebSocket協(xié)議系統(tǒng)架構(gòu)模型如圖1所示。
圖1 基于WebSocket協(xié)議系統(tǒng)架構(gòu)模型
用戶代理有兩種形式,一種是當用戶瀏覽網(wǎng)頁時,用戶代理獲取用戶的瀏覽信息,根據(jù)用戶瀏覽信息發(fā)現(xiàn)用戶感興趣的信息,建立用戶興趣模型;另一種是根據(jù)用戶提交的訂閱信息,建立用戶興趣。
當Internet網(wǎng)絡(luò)中各種信息以數(shù)據(jù)流的形式傳輸?shù)椒?wù)器端時,數(shù)據(jù)流首先經(jīng)過數(shù)據(jù)轉(zhuǎn)換模塊轉(zhuǎn)換為事件處理模塊能夠識別的事件流,然后數(shù)據(jù)以事件流的形式輸出到事件處理模塊。
對事件的處理采用了復(fù)雜事件處理技術(shù)。其基本原理是首先從事件流中提取原子事件;然后根據(jù)已經(jīng)設(shè)置的規(guī)則,去除不需要的事件,其次將低層次的事件聚合成高層次的事件,并將局部事件組合成整體事件;然后對原子事件或整體事件進行匹配、判斷和推理,從而獲取事件之間的時間關(guān)系、因果關(guān)系、邏輯關(guān)系等;最后與已存儲的用戶興趣數(shù)據(jù)進行對比,進而進行判斷,查找,決策和預(yù)測等功能[8,9,10]。復(fù)雜事件處理過程如圖2所示。
圖2 復(fù)雜事件處理過程圖
首先復(fù)雜事件建模根據(jù)事件類型、邏輯關(guān)系、時序關(guān)系等,將接收的事件流進行整合,其次通過復(fù)雜事件語言描述生成復(fù)雜事件模型庫,然后根據(jù)用戶代理生成的用戶興趣模型與復(fù)雜事件模型庫進行復(fù)雜事件檢測,若不符合用戶需求,則直接忽略;若符合用戶需求,則形成復(fù)雜事件庫,同時生成事件消息并觸發(fā)數(shù)據(jù)推送模塊。
數(shù)據(jù)推送采用基于WebSocket協(xié)議的服務(wù)器推送技術(shù),建立WebSocket建立,連接建立的過程與TCP建立連接的過程是類似的,都基于TCP協(xié)議[4,11]?;?WebSocket協(xié)議的通信圖如圖3所示。
圖3 基于WebSocket協(xié)議的通信圖
WebSocket協(xié)議是服務(wù)器端和客戶端瀏覽器之間建立一條可以進行雙向通信的基于TCP連接的雙向連接通道??蛻舳藶g覽器通過80或433端口向服務(wù)器端發(fā)出建立連接請求,服務(wù)器端根據(jù)HTTP header解析客戶端瀏覽器發(fā)送來的請求,若是WebSocket請求,則升級請求建立WebSocket連接。連接成功后,客戶端瀏覽器和服務(wù)器端就可以通過 Web-Socket連接直接進行數(shù)據(jù)交換。服務(wù)器在接收消息的同時觸發(fā)推送機制將消息推送到客戶端瀏覽器,呈現(xiàn)在客戶面前。
本文通過對服務(wù)器推送技術(shù)工作原理及其各自優(yōu)缺點的介紹,了解到基于WebSocket協(xié)議的服務(wù)器推送技術(shù)具有高實時性和資源占用小等優(yōu)點。通過對實時Web應(yīng)用架構(gòu)的設(shè)計,了解到利用WebSocket協(xié)議可以設(shè)計出多種實時性強、效率高的 Web應(yīng)用。Websocket作為一個正在演變中的web規(guī)范,Websocket規(guī)范和API存在變動的可能,雖然目前websocket構(gòu)建應(yīng)用程序可能存在一定的風險,但websocket將會成為未來開發(fā)實時Web應(yīng)用的主力軍。
[1]孫清國,朱瑋,劉華軍,張鵬.Web應(yīng)用中的服務(wù)器推送技術(shù)研究綜述[J].計算機系統(tǒng)應(yīng)用,2008,11:116-120.
[2]李代立,陳榕.WebSocket在 Web實時通信領(lǐng)域的研究[J].電腦知識與技術(shù),2010,28:7923-7925+7935.
[3]鄭強.web服務(wù)器推送技術(shù)的設(shè)計與實現(xiàn)[D].北京郵電大學,2013.
[4]費日東,李定主.服務(wù)器推送技術(shù)研究[J].電腦知識與技術(shù),2012,07:1516-1517.
[5]溫照松,易仁偉,姚寒冰.基于 WebSocket的實時 Web應(yīng)用解決方案[J].電腦知識與技術(shù),2012,16:3826-3828.
[6]廖清平.基于 Web的服務(wù)器的Push技術(shù)研究和應(yīng)用[D].中山大學,2013.
[7]湯玲麗.復(fù)雜事件處理引擎關(guān)鍵技術(shù)研究[D].哈爾濱工程大學,2012.
[8]江連峰,趙佳寶.復(fù)雜事件處理技術(shù)及其應(yīng)用綜述[J].軟件,2014,02:188-192.
[9]方金燦.面向港口物流的物聯(lián)網(wǎng)中間件復(fù)雜事件處理[D].大連理工大學,2013.
[10]湯新.Ceper:一個高性能復(fù)雜事件處理引擎[J].電腦與信息技術(shù),2013,04:32-37.
[11]鄢金端,夏吉廣,張愛玉.服務(wù)器推送技術(shù)在智能倉儲物聯(lián)網(wǎng)中的應(yīng)用[J].警察技術(shù),2013,02:19-22.