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