隨著互聯網技術的發展,Web服務應用也是也來越廣泛,涉及到了各行各業,并且對于網頁應用有了更深層次的開發應用。Ajax技術已經廣泛應用在Web架枸的系統中,但是傳統的Ajax不能滿足實時性較高的場景。因此通過網頁端驅動Web服務器進行業務推送的反向Ajax請求技術成為當前熱門的前沿研究方向,并在很多的實際領域中得到實際應用,如當前廣泛被應用的二維碼掃描后的頁面自動跳轉等新成果。反向ajax Web開發在最近幾年有了很大的發展,已經超過了把靜態網頁鏈接在一起的方法,這種做法引起瀏覽器刷新,等待頁面的加載。現在需要的通過Web來訪問完全動態應用,這些通常需要盡快解決,提供實時的組件。本文通過對反向Ajax研究對于常用的反向Ajax請求的優缺點進行詳細分析,針對當前反向Ajax請求具有的不足點進行優化,實現有更好實時性和更低資源消耗量的反向Ajax請求方式。
【關鍵詞】互聯網 Ajax技術 反向Ajax技術 二維碼 頁面跳轉
在最近的幾年時間中,Web 開發技術發生了很大的變化。現在,我們需要的Web服務是能夠通過 快速Web、動態訪問應用。目前Web的開發應用已經遠遠超出了把各類靜態網頁鏈接一起的方法,采用靜態頁面鏈接的方法在進行頁面切換時能引起瀏覽器的頁面刷新,需要頁面發起Ajax請求,需要等待頁面回應請求并且加載頁面。而現在的Web開發希望目的是能通過 Web頁面來訪問完全動態的應用。而這樣的應用往往都是要求有盡量快的響應速度,幾乎接近與實時組建的響應,與一般的實體客戶端軟件這些應用通常需要盡可能的快,提供近乎實時的組件。因此,需要研究一種具有實時反應速度,能夠及時響應頁面的訪問技術,反向 Ajax 的目的為了讓服務器將信息推送至客戶端。Ajax 請求發出在一般狀態下是不進行狀態設定,使用時只能從客戶端到服務器端發起請求,服務器端對請求進行處理響應。而該技術是通過使用虛擬的通信技術模擬現有的服務器端和客戶端之間形成的響應式通信來繞過這一條件限制,達到客戶端可以反向獲取到服務器端提供的服務數據。
目前在Web頁面上的響應方式主要有三種常用的技術,分別是Ajax技術、反向Ajax技術和WebSockets技術。他們分別應用與不同的場景中:
Ajax技術為異步的 JavaScript 和 XML (Ajax),一種是可通過 JavaScript 來訪問的瀏覽器功能特性,允許腳本向幕后的網站發送一個 HTTP 請求而又無需重新加載頁面。 Ajax 的出現已經超過了10年,盡管其名字中包含了 XML,但您幾乎可以在 Ajax 請求中傳送任何的東西。最常使用的數據為 JSON,它與 JavaScript 語法非常接近并且消耗更少的帶寬。
1 反向Ajax技術實現
反向 Ajax (Reverse Ajax) 原則上是能夠從服務器端向客戶端發送數據。在標準的 HTTP Ajax 請求中:
數據是發送到服務器端的,反向 Ajax可以某些特定的方式來模擬發出一個 Ajax請求,這些方式本文都會討論到,服務器就可以盡可能快地向客戶端發送事件(低延遲通信)。Ajax 請求默認情況中是無狀態的,并且只能從客戶端向服務器端發出請求。客戶可以通過使用技術模擬服務器端和客戶端之間的響應式通信來跳過這一限制。反向Ajax請求主要采用的方式包括Polling,Piggyback等,在每種方式下都進行相應的請求處理,具有一些優勢和缺陷。
1.1 Polling
輪詢(Polling)常用的包括HTTP 輪詢和 JSONP 輪詢,輪詢主要是進行客戶端向服務器端發出請求以獲取服務器回顯數據的方式,這是一種典型的Ajax HTTP 請求。但是我們希望通過這樣的Ajax請求實現反Ajax服務就需要做到客戶端盡快獲得服務器端的事件,客戶端連詢間隔(發起兩次的請求間隔時間)必須做到非常的小才能保證實現服務在向客戶端推送的結果。這樣的快速輪詢Ajax就是典型的HTTP 輪詢方式。JSONP 輪詢基本上與 HTTP 輪詢實現方式基本采用了同樣的方式。主要的不同之處在于JSONP輪詢是可以發送跨域請求(在不同域間實現數據請求服務)。通過HTTP輪詢實現反向Ajax請求如圖1所示。
雖然可以通過傳統的Ajax請求方式通過縮短發送間隔時間實現反向Ajax請求。但仍然存在著很明顯的缺陷,但凡請求的間隔時間縮短,瀏覽器端會發出許多請求數據,并且這些請求數據中的很多都不會有任何有效的數據返回,故這樣的方式會浪費大量的計算資源和網絡的帶寬資源。
1.2 Piggyback
捎帶輪詢 (piggyback polling) 是在輪詢的基礎上進行的優化處理,主要優化了不到數據返回的無效請求。因此捎帶輪詢是一種比輪詢更智能呢個的方式,它會將請求中的非必需請求(無數據返回的請求)進行過濾刪除。這樣將不會受限于時間的間隔,因為客戶端在有需要的時候才會向服務器端發送請求,而與普通連詢不同之處主要在于請求響應上。響應被劃分為兩個部分:一是對請求數據的響應,二是對服務器事件的響應,如果當任何一部分有事件數據發生,服務器端都會對 Ajax 請求進行響應會返回一個混合的響應數據會客戶端。通過piggyback 輪詢方式實現反向 Ajax請求如圖2所示。
通過實際方法的應用發現使用捎帶輪詢技術時,通常是客戶端向服務器發送一個Ajax請求后才會觸發后續的混合響應形成。這樣的方式使得客戶端的請求沒有不返回數據的,因為客戶端對什么時候發送請求做了控制,有效提高處理資源和網絡資源的利用率,降低了無效的消耗。并且該技術可以在所有的瀏覽器客戶端上應用,不受服務器端功能限制。但是采用捎帶輪詢的方式也是存在著一個明顯的缺陷,就是在進行Ajax請求時都要求客戶端優先發起連接請求后才會主動進行事件推送服務,而客戶端沒有進行請求發起時即使服務器有很多事件需要傳送到客戶端也不能將事件推送到客戶端。造成服務器端傳送事件的壅塞和推送服務的失敗。
2 反向Ajax技術優化
使用了連詢或是捎帶連詢的反向 Ajax請求因為不具備伸縮性,沒能提供低延遲通信(只要事件一旦到達服務器端,它們就以最快的速度到達瀏覽器端),導致應用非常受限。正式由于當前使用的反向Ajax請求的推送服務存在以上的技術缺陷,使得反向推送服務發展受到了阻礙,因此我們希望對現有的反向Ajax技術進行優化。
在優化時使用了一種基于Web應用模型Comet進行事件推送,在此模型中,請求被發送到服務器端并且保持一個長時間的存活期,一直到超時或是有服務器端事件的發生。在這個請求完成后,另外一個長生存期的 Ajax 請求就被送去等待著另一服務器端事件。使用 Comet時Web 服務器可以在無需顯示請求的情況下給客戶端發送數據。在Comet模型中使用流 模式,在流模式下會打開一個持久的連接,會保持一個較長的生存期的請求,每一個到達服務器端的事件全部會通過這個同一連接來發送。因此采用Forever Iframe技術把客戶端通過這一連接請求發送過來的不同響應分隔開。而目前優化實現 Comet 采取的方法是打開一個能到服務器端的 Ajax 請求然后等待其響應。服務器端需要一些特殊的功能來允許請求被掛起,一旦有事件發生,服務器端就會在掛起的所有請求中送回響應并關閉該請求,完全就像是關閉了 servlet 響應的輸出流。然后客戶端使用這一響應并且打開一個新的到服務器端的長生存期的 Ajax 請求,從而保證了長生存期的Ajax請求。通過Comet方式實現反向Ajax請求如圖3所示。
使用Comet方式的反向Ajax請求主要的優勢在于每個客戶端都會有一個持續連接到服務器端的通信鏈路。服務器端可以通過有事件到來時提交響應,把事件推送給客戶端,或者也可以累積事件后進行連續發送。因為存在請求需要保持長時間打開狀態,所以服務器端需要特別的功能來處理所有這些長生存期請求,保證長生存請求不會丟失和擁塞。
3 反向Ajax優化模型Comet的應用優化
反向Ajax請求常被應用于:
(1)Web網頁自動彈出提示信息而無需用戶手動的刷新頁面的功能;
(2)手機掃描頁面中的二維碼以后,進行頁面的自動跳轉功能;
(3)頁面聊天的聊天記錄自動共享所有用戶功能等實際應用。
在使用反向Ajax請求實現的Web 服務器會給每一個連接創建一個線程,如果需要在大型應用中使用 Comet模型,服務器端需維護大量并發的長連接。在這種狀態下,服務器端考慮到負載均衡和集群技術;或在服務器端改進長連接。而且AJAX 的應用使請求的出現次數變得更加的頻繁,但是 Comet則會很長時間占用一個連接,這樣在大量連接出現的應用背景下請求會變得效率非常低,大量的占用線程池里有限的線程數,甚至會阻塞新的連接發起,給集中應用部署帶來了很大困難。
針對這樣應用問題在使用反向Ajax請求時對Comet模型進行應用的優化使得在應用連接處于空閑時,將這個空閑連接分配的線程資源返送到線程池,返還資源還可以供新的連接使用;當原來處于空閑的連接客戶發出新請求時,會從線程池中重新分配一個線程資源用來處理這個請求。這種狀態的優化方式在連接處于空閑機率比較高、并發連接數目多的場景下, 的降低了服務器的資源負載。并且在采取這樣的優化方式后還可以確保客戶端不工作時服務器端可以自動釋放為這些連接分配的資源,有效防止服務器端出現內存泄露,為正常服務提供了保障。
4 結論
本文對現有基于反向Ajax請求的Web服務器推送技術進行了研究。針對反向Ajax請求存在的缺陷進行分析,采取多項技術進行優化保證Ajax請求的有效性和系統的可靠性。通過反向ajax Web開發不止是把靜態網頁鏈接在一起,這樣做會引起瀏覽器的刷新,要等待頁面的加載。現在需要能夠通過Web來訪問的完全動態的應用,這些應用通常以最快的速度,提供給Web頁面接近實時的組件服務。
Web框架過去通常依賴傳統 “請求-響應” 模式,該模式會導致頁面刷新,消耗大量的處理資源和網絡資源,限制了傳統模式的大規模應用實踐。隨著反向Ajax等新技術的出現和不斷發展,現在可以將事件驅動架構的概念輕松應用于 Web,獲得去耦合、可伸縮性和反應性強等好處。更良好的用戶體驗也會帶來新的商業應用,帶來更多的技術發展。
參考文獻
[1]劉媚,王旭陽.基于Comet技術的WEB實時性應用的研究[J].無線互聯科技,2016.
[2]李貞.服務器端狀態保持機制的軟件系統設計與實現[D].成都:電子科技大學,2011.
[3]許建鵬.基于DWR框架的Web應用研究與實現[D].青島中國海洋大學,2009.
[4]文愛平,文德民.基于IE瀏覽器的Ajax Comet架構[J].電腦知識與技術,2010(17).
[5]楊遜.基于Ajax的員工報銷管理系統設計[D].成都:電子科技大學,2014.
[6]段子飛.支持Ajax的Deep Web網絡爬蟲系統的設計與實現[D].廣州:華南理工大學, 2015.
[7]楊俊峰,黎建輝,楊風雷.深層網站Ajax頁面數據采集研究綜述[J].計算機應用研究,2013(06).
[8]陳莉莉,張麗,劉正龍.搜索引擎中基于狀態的Ajax動態網頁提取研究[J].計算機應用與軟件,2013(07).
[9]方雪峰,唐珂,夏海軍,毛曉麗.基于網絡原型挖掘的AjaxCrawler系統研究[J].電子技術與軟件工程,2013(18).
[10]陸亮,李東.支持AJAX的網絡爬蟲設計與實現[J].智能計算機與應用,2013(06).
作者簡介
肖婧(1982-),女,碩士學位。現為石河子大學信息科學與技術學院講師,主要從事計算機基礎教學與數據分析的教學研究工作。
作者單位
石河子大學信息科學與技術學院 新疆維吾爾自治區石河子市 832000