




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、服務(wù)器推送技術(shù)“服務(wù)器推送技術(shù)"(ServerPushing)是最近Web技術(shù)中最熱門的一個(gè)流行術(shù)語(yǔ)。它是繼“Ajax”之后又一個(gè)倍受追捧的Web技術(shù)?!胺?wù)器推送技術(shù)”最近的流行跟“Ajax”有著密切的關(guān)系。隨著Ajax技術(shù)的興起,讓廣大開發(fā)人員又一次看到了使用瀏覽器來(lái)替代桌面應(yīng)用的機(jī)會(huì),并且這次機(jī)會(huì)非常大。Ajax將整個(gè)頁(yè)面的刷新變成頁(yè)面局部的刷新,并且數(shù)據(jù)的傳送是以異步方式進(jìn)行,這使得網(wǎng)絡(luò)延遲帶來(lái)的視覺差異將會(huì)消失。但是,在瀏覽器中的Ajax應(yīng)用中存在一個(gè)致命的缺陷無(wú)法滿足傳統(tǒng)桌面系統(tǒng)的需求。那就是“服務(wù)器發(fā)起的消息傳遞”(Server-InitiatedMessageDeli
2、very)。在很多的應(yīng)用當(dāng)中,服務(wù)器軟件需要向客戶端主動(dòng)發(fā)送消息或信息。因?yàn)榉?wù)器掌握著系統(tǒng)的主要資源,能夠最先獲得系統(tǒng)的狀態(tài)變化和事件的發(fā)生。當(dāng)這些變化發(fā)生的時(shí)候,服務(wù)器需要主動(dòng)的向客戶端實(shí)時(shí)的發(fā)送消息。例如股票的變化。在傳統(tǒng)的桌面系統(tǒng)這種需求沒(méi)有任何問(wèn)題,因?yàn)榭蛻舳撕头?wù)器之間通常存在著持久的連接,這個(gè)連接可以雙向傳遞各種數(shù)據(jù)。而基于HTTP協(xié)議的Web應(yīng)用卻不行。2客戶端得到通知的方式refresh2refresh1refresh3userbrowserserver圖1傳統(tǒng)web訪問(wèn)機(jī)制我們知道,Web的訪問(wèn)機(jī)制天生是設(shè)計(jì)用來(lái)pull數(shù)據(jù)的,如圖1,也就是只允許Browser端主動(dòng)發(fā)起請(qǐng)
3、求,server是被動(dòng)的響應(yīng),不允許Server向Browser發(fā)出一個(gè)connection請(qǐng)求,也就是說(shuō)沒(méi)有為server向Browserpush數(shù)據(jù)提供設(shè)計(jì)實(shí)現(xiàn).雖然沒(méi)有直接的實(shí)現(xiàn)方法,卻可以使用一些變通的方式完成類似的功能。2.1 傳統(tǒng)輪詢?cè)赪eb早期,這一點(diǎn)常使用meta刷新實(shí)現(xiàn)。這將自動(dòng)指示瀏覽器在指定秒數(shù)之后重新裝載頁(yè)面,從而支持簡(jiǎn)陋的輪詢(polling)。例如在HTML文件中加入METAHTTP-RQUIV="Refresh"CONTENT=12,實(shí)際上就是HTTP頭標(biāo)告知瀏覽器每12秒更新一次文檔。優(yōu)點(diǎn):不需要服務(wù)器端的配置。缺點(diǎn):a)糟糕的用戶體驗(yàn)b)對(duì)
4、服務(wù)器的壓力很大,并且造成帶寬的極大浪費(fèi)。Ajax輪詢Ajax隔一段時(shí)間(通常使用JavaScript的setTimeout函數(shù))就去服務(wù)器查詢是否有改變,從而進(jìn)行增量式的更新。但是間隔多長(zhǎng)時(shí)間去查詢成了問(wèn)題,因?yàn)樾阅芎图磿r(shí)性造成了嚴(yán)重的反比關(guān)系。間隔太短,連續(xù)不斷的請(qǐng)求會(huì)沖垮服務(wù)器,間隔太長(zhǎng),務(wù)器上的新數(shù)據(jù)就需要越多的時(shí)間才能到達(dá)客戶機(jī)。優(yōu)點(diǎn):a)不需要太多服務(wù)器端的配置。b)降低帶寬的負(fù)荷(因?yàn)榉?wù)器返回的不是完整頁(yè)面)。缺點(diǎn):a)對(duì)服務(wù)器的壓力并不會(huì)有明顯的減少。b)實(shí)時(shí)性差,有一定的延遲。應(yīng)用:這是一項(xiàng)非常常見的技術(shù),例如,大多數(shù)webmail應(yīng)用程序就是通過(guò)這種技術(shù)在電子郵件到達(dá)時(shí)顯
5、示電子郵件的。CometComet方式通俗的說(shuō)就是一種長(zhǎng)連接機(jī)制(longlivedhttp)。同樣是由Browser端主動(dòng)發(fā)起請(qǐng)求,但是Server端以一種似乎非常慢的響應(yīng)方式給出回答。這樣在這個(gè)期間內(nèi),服務(wù)器端可以使用同一個(gè)connection把要更新的數(shù)據(jù)主動(dòng)發(fā)送給Browsero因此請(qǐng)求可能等待較長(zhǎng)的時(shí)間,期間沒(méi)有任何數(shù)據(jù)返回,但是一旦有了新的數(shù)據(jù),它將立即被發(fā)送到客戶機(jī)。Comet又有很多種實(shí)現(xiàn)方式,但是總的來(lái)說(shuō)對(duì)Server端的負(fù)載都會(huì)有增加.雖然對(duì)于單位操作來(lái)說(shuō),每次只需要建議一次connection,但是由于connection是保持較長(zhǎng)時(shí)間的,對(duì)于server端的資源的占用要
6、有所增加。優(yōu)點(diǎn):實(shí)時(shí)性好(消息延時(shí)?。恍阅芎茫苤С执罅坑脩簦┤秉c(diǎn):長(zhǎng)期占用連接,喪失了無(wú)狀態(tài)高并發(fā)的特點(diǎn)。應(yīng)用:股票系統(tǒng)、實(shí)時(shí)通訊。FlashXMLSocket這種方案實(shí)現(xiàn)的基礎(chǔ)是:一、Flash提供了XMLSocket類。二、JavaScript和Flash的緊密結(jié)合:在JavaScript可以直接調(diào)用Flash程序提供的接口。缺點(diǎn):a)因?yàn)閄MLSocket沒(méi)有HTTP隧道功能,XMLSocket類不能自動(dòng)穿過(guò)防火墻;b)因?yàn)槭鞘褂锰捉涌?,需要設(shè)置一個(gè)通信端口,防火墻、代理服務(wù)器也可能對(duì)非HTTP通道端口進(jìn)行限制;應(yīng)用:網(wǎng)絡(luò)聊天室,網(wǎng)絡(luò)互動(dòng)游戲。JavaApplet套接口在客戶端使用J
7、avaApplet,通過(guò).Socket或.DatagramSocket或.MulticastSocket建立與服務(wù)器端的套接口連接,從而實(shí)現(xiàn)服務(wù)器推送”。缺點(diǎn):需要客戶端安裝JAVA虛擬機(jī)。Comet介紹Comet有時(shí)也稱反向Ajax或服務(wù)器端推技術(shù)(server-sidepush)。其思想很簡(jiǎn)單:將數(shù)據(jù)直接從服務(wù)器推到瀏覽器,而不必等到瀏覽器請(qǐng)求數(shù)據(jù)。聽起來(lái)簡(jiǎn)單,但是如果熟悉Web應(yīng)用程序,尤其是HTTP協(xié)議,那么您就會(huì)知道,這絕不簡(jiǎn)單。實(shí)現(xiàn)Comet風(fēng)格的Web應(yīng)用程序,同時(shí)保證在瀏覽器和服務(wù)器上的可伸縮性,這只是在最近幾年才成為可能。目前一些主流網(wǎng)站都有類似的原理,例如:webQQ、開心
8、網(wǎng)、校內(nèi)等等,它們中消息動(dòng)態(tài)都是采用類似的技術(shù),只是具體實(shí)現(xiàn)方式不一樣。COMET的精髓就在于用服務(wù)器與javascript來(lái)維持瀏覽器的長(zhǎng)連接,同時(shí)完成服務(wù)器端事件的瀏覽器端響應(yīng)。這樣的事件廣播機(jī)制是跨網(wǎng)絡(luò)的,同時(shí)也是實(shí)時(shí)的。采用了Comet技術(shù)的服務(wù)器在客戶機(jī)做出一個(gè)請(qǐng)求后,和客戶機(jī)建立一個(gè)永久的連接,然后服務(wù)器會(huì)根據(jù)客戶機(jī)的請(qǐng)求不斷把數(shù)據(jù)包推向客戶,這個(gè)推的過(guò)程是不間斷的。由服務(wù)器推向客戶機(jī)的數(shù)據(jù)在客戶機(jī)的瀏覽器上會(huì)不斷產(chǎn)生新的內(nèi)容,而且不會(huì)產(chǎn)生Clientpull那樣的HTML文檔頭,從而大大減少了延遲的時(shí)間,向(服務(wù)器響應(yīng)-客戶機(jī)請(qǐng)求)同步邁進(jìn)了"步°服務(wù)器推送通
9、常效率要比客戶端拖曳效率高,因?yàn)樗槐貫楹罄m(xù)數(shù)據(jù)建立新的連接。由于始終保持連接,即使沒(méi)有數(shù)據(jù)傳輸時(shí)也是這樣,因此服務(wù)器必須愿意分配這些TCP/IP端口,對(duì)于TCP/IP端口數(shù)有限的服務(wù)器這將是一個(gè)嚴(yán)重的問(wèn)題??蛻舳送弦沸实停?yàn)檫@必須每次為傳送數(shù)據(jù)建立新的連接。但是它不必始終保持連接。在實(shí)際情況中,建立HTTP連接通常需要花費(fèi)相當(dāng)多的時(shí)間,多達(dá)一秒甚至更多。因此從性能上考慮,服務(wù)器推送對(duì)于最終用戶更有吸引力,特別是對(duì)于需要經(jīng)常更新信息的情況下。服務(wù)器推送相對(duì)客戶端拖曳的另一點(diǎn)優(yōu)勢(shì)是,服務(wù)器推送相對(duì)比較容易控制。例如,服務(wù)器每一次推送時(shí)都保持一個(gè)連接,但它又隨時(shí)可以關(guān)閉其中的任何連接,而不需要
10、在服務(wù)器上設(shè)置特殊的算法。而客戶端拖曳在同樣的情況下要麻煩許多,它每次要與服務(wù)器建立連接,服務(wù)器為了處理將客戶端拖曳請(qǐng)求與特定的最終用戶匹配等情況,需要使用相當(dāng)麻煩的算法。如上所述,在服務(wù)器推送中,多個(gè)響應(yīng)中連接始終保持,使服務(wù)器可在任何時(shí)間發(fā)送更多的數(shù)據(jù)。一個(gè)明顯的好處是服務(wù)器完全能夠控制更新數(shù)據(jù)的時(shí)間和頻率。另外,這種方法效率高,因?yàn)槭冀K保持連接。缺點(diǎn)是保持連接狀態(tài)會(huì)浪費(fèi)服務(wù)器端的資源。服務(wù)器推送還比較容易中斷。Comet實(shí)現(xiàn)(Java語(yǔ)言)死循環(huán)法最簡(jiǎn)單的自然是死循環(huán)法,如果使用觀察者模式則可以進(jìn)一步提高性能。但是這種做法的缺點(diǎn)在于客戶端請(qǐng)求了這個(gè)servlet后,web服務(wù)器會(huì)開啟一個(gè)
11、線程執(zhí)行servlet的代碼,而servlet由遲遲不肯結(jié)束,造成該線程也無(wú)法被釋放。于是乎,一個(gè)客戶端一個(gè)線程,當(dāng)客戶端數(shù)量增加時(shí),服務(wù)器依然會(huì)承受很大的負(fù)擔(dān)。改寫web服務(wù)器目前的趨勢(shì)是從web服務(wù)器內(nèi)部入手,用nio(JDK1.4提出的java.nio包)改寫request/response的實(shí)現(xiàn),再利用線程池增強(qiáng)服務(wù)器的資源利用率,從而解決這個(gè)問(wèn)題,目前支持這一非J2EE官方技術(shù)的服務(wù)器有Glassfish和Jetty。JDK1.4版本(包括之后的版本)最顯著的新特性就是增加了NIO(NewIO),能夠以非阻塞的方式處理網(wǎng)絡(luò)的請(qǐng)求,這就使得在Java中只需要少量的線程就能處理大量的并發(fā)
12、請(qǐng)求了。Jetty6設(shè)計(jì)來(lái)處理大量并發(fā)連接,它使用Java語(yǔ)言的不堵塞I/O(java.nio)庫(kù)并且使用優(yōu)化的輸出緩沖架構(gòu)。Jetty也有一個(gè)處理長(zhǎng)連接的殺手銅:一個(gè)稱為Continuations的特性。Grizzly作為GlassFish中非常重要的一個(gè)項(xiàng)目,就是用NIO的技術(shù)來(lái)實(shí)現(xiàn)應(yīng)用服務(wù)器中的高性能純Java的HTTP弓I擎。Grizzly還是一個(gè)獨(dú)立于GlassFish的框架結(jié)構(gòu),可以單獨(dú)用來(lái)擴(kuò)展和構(gòu)建自己的服務(wù)器軟件。特點(diǎn):使用NIO不是一件簡(jiǎn)單的技術(shù),它的一些特點(diǎn)使得編程的模型比原來(lái)阻塞的方式更為復(fù)雜。使用框架基于Java的成熟的服務(wù)器推送框架有DWR。DWR是一個(gè)開放源碼的使用Apache許可協(xié)議的解決方案,它包含服務(wù)器端Java庫(kù)、一個(gè)DWRservlet以及JavaScript庫(kù)。雖然DWR不是Java平臺(tái)上唯一可用的Ajax-RPC工具包,但是它是最成熟的,而且提供了許多有用的功能。從最簡(jiǎn)單的角度來(lái)說(shuō),DWR是一個(gè)引擎,可以把服務(wù)器端Java對(duì)象的方法公開給JavaScript代碼。使用DWR可以有效地從應(yīng)用程序代碼中把Ajax的全部請(qǐng)求-響應(yīng)循環(huán)消除掉。這意味著客戶端代碼再也不需要直接處理XMLHttpRequest對(duì)象或者服務(wù)器的響應(yīng)。不再需要編寫對(duì)象的序列化代碼或者使用第三方工具才能把對(duì)象變成XM
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村公路合同范例
- 會(huì)議策劃合同范例
- 基于聯(lián)邦學(xué)習(xí)的公共安全突發(fā)事件追蹤和監(jiān)測(cè)
- 企業(yè)合同范例在
- 跨學(xué)科實(shí)踐在初中物理教學(xué)中的應(yīng)用研究
- 樂(lè)器續(xù)租合同范例
- 加工建設(shè)合同范例
- 分紅權(quán)合同范例
- 上海建筑防水工程合同范例
- 2025年中心靜脈導(dǎo)管合作協(xié)議書
- 可愛的中國(guó)教案全冊(cè)
- 小學(xué)一年級(jí)勞動(dòng)課教案(全冊(cè))
- 立體庫(kù)風(fēng)險(xiǎn)分析及安全措施
- 地鐵鋼結(jié)構(gòu)雨棚施工方案
- 廠區(qū)綠化養(yǎng)護(hù)合同
- 421年產(chǎn)1億片頭孢氨芐生產(chǎn)車間工藝設(shè)計(jì)(施施)
- 日本文學(xué)史課件
- 胃腸間質(zhì)瘤診療共識(shí)
- 初高中政治銜接(課堂)課件
- 福特金牛座說(shuō)明書
- 蒙臺(tái)梭利教學(xué)法PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論