国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

服務(wù)器推送技術(shù)研究

2012-05-08 04:41費(fèi)日東李定主
電腦知識與技術(shù) 2012年7期

費(fèi)日東 李定主

摘要:傳統(tǒng)B/S應(yīng)用中,瀏覽器中的頁面每次需要手動刷新才能從服務(wù)器端獲得最新的數(shù)據(jù),存在一定的時間延遲和較差的用戶體驗。該文首先闡述上述問題的解決思路和服務(wù)器推送技術(shù)的發(fā)展,著重介紹使用HTTP長連接、無須瀏覽器安裝插件的的Comet方案,給出了服務(wù)器推送的三種具體實現(xiàn)方式。

關(guān)鍵詞:服務(wù)器推送;Comet;AJAX

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)07-1516-02

Study on Server Push Technology

FEI Ri-dong1,LI Ding-zhu2

(1.School of Electronics & Computer Science, North Central University,Taiyuan 030051,China; 2.North Automatic Control Research Institute, Taiyuan 030024, China)

Abstract: In the traditional B/S application, the page in the browserneed to manually refresh to get the latest data every time from the server side, there is a certain time delay and poor user experience. This paper first describes the above problem solving ideas and the development of server-push technology, focuses on the Comnet which use HTTP long connection and need not install the plug-I, lists the three specific implementations.

Key words: server Push , Comet,AJAX

隨著Web技術(shù)的流行,越來越多的應(yīng)用從原有的C/S模式轉(zhuǎn)變?yōu)锽/S模式,享受著Web技術(shù)所帶來的各種優(yōu)勢(例如跨平臺、免客戶端維護(hù)、跨越防火墻、擴(kuò)展性好等)。但是基于瀏覽器的應(yīng)用,也有它不足的地方。主要在于界面的友好性和交互性。由于瀏覽器中的頁面每次需要全部刷新才能從服務(wù)器端獲得最新的數(shù)據(jù)或向服務(wù)器傳送數(shù)據(jù),這樣產(chǎn)生的延遲所帶來的視覺感受非常糟糕。

1服務(wù)器推送技術(shù)的發(fā)展

1.1純?yōu)g覽器并

Web應(yīng)用中通常使用的是超文本傳送協(xié)議(HTTP)協(xié)議,而HTTP協(xié)議是沒有狀態(tài)的,服務(wù)器處理完客戶端請求并收到應(yīng)答后就斷開連接,所以并不能實現(xiàn)“服務(wù)器推送”。早期的“服務(wù)器推送”是通過瀏覽器端的Socket套接字和服務(wù)器端的遠(yuǎn)程調(diào)用實現(xiàn)的[1]。網(wǎng)景公司于1995年推出適用于Push技術(shù)的專用瀏覽器和經(jīng)過修改的HTML語言[2]。但是這僅僅在部分瀏覽器中才能使用,由于廠商之間的競爭,但常用的IE瀏覽器就支持這種技術(shù);還采用瀏覽器的插件的實現(xiàn)的方式,例如使用ActiveX、Applet、Flash,但是瀏覽器插件需要用戶時必須先安裝插件,操作系統(tǒng)和插件版本兼容性問題也經(jīng)常出現(xiàn),系統(tǒng)的防火墻也會因非標(biāo)準(zhǔn)的端口(非80端口)而攔截這些通信;HTML5標(biāo)準(zhǔn)中的WebSockets API允許Web服務(wù)器和客戶端通信通過一個全雙工TCP連接,但HTML5尚未

大規(guī)模應(yīng)用[3]。

最近,隨著AJAX(Asynchronous JavaScript and XML)技術(shù)的發(fā)展,人們重新關(guān)注基于純HTTP協(xié)議的服務(wù)器推送技術(shù),這種基于HTTP長連接、無須在瀏覽器端安裝插件的服務(wù)器推送技術(shù)為“Comet”。Comet的精髓就在服務(wù)器端處完要發(fā)送的數(shù)據(jù)后,并不是立即斷開連接,而是保持現(xiàn)有的HTTP連接不斷,服務(wù)器通過這個保持的連接就可以將更新的數(shù)據(jù)發(fā)送給客戶端,實現(xiàn)實時通信。目前一些主流網(wǎng)站都有類似的原理,例如:WebQQ、開心網(wǎng)、校內(nèi)等等,它們中消息動態(tài)都是采用類似的技術(shù),只是具體實現(xiàn)方式不一樣。

1.2 Comet實現(xiàn)原理

Comet一般采用通過AJAX技術(shù)實現(xiàn)。瀏覽器端通過調(diào)用JavaScript代碼的XMLHttpRequest對象發(fā)出HTTP請求,請求返回值的回調(diào)函數(shù)將收到的服務(wù)器信息更新到頁面。參考圖1,Comet技術(shù)與傳統(tǒng)的AJAX輪詢的區(qū)別在于:

1)服務(wù)器端會保持請求連接直到超時或著有新數(shù)據(jù)返回。

2)瀏覽器端每次收到新數(shù)據(jù)后會重新發(fā)出請求,以保持長連接。

3)當(dāng)連接正在建立不能發(fā)送數(shù)據(jù)時,服務(wù)器端可以緩存數(shù)據(jù)直到連接建立,再發(fā)送給客戶端。

圖1 Comet實現(xiàn)原理

Comet技術(shù)具有以下一些優(yōu)點:主流的服務(wù)器例如IE、Mozilla FireFox等都支持AJAX;不需要安裝任何插件;請求發(fā)出異步。在這種長輪詢方式下,客戶端是在XMLHttpRequest的readystate為4(即數(shù)據(jù)傳輸結(jié)束)時調(diào)用回調(diào)函數(shù),進(jìn)行信息處理。當(dāng)readystate為4時,數(shù)據(jù)傳輸結(jié)束,連接已經(jīng)關(guān)閉。Mozilla Firefox提供了對Streaming AJAX的支持,即readystate為3時(數(shù)據(jù)仍在傳輸中),客戶端可以讀取數(shù)據(jù),從而無須關(guān)閉連接,就能讀取處理服務(wù)器端返回的信息。IE在readystate為3時,不能讀取服務(wù)器返回的數(shù)據(jù),目前IE不支持基于Streaming AJAX[4]。

2服務(wù)器推送技術(shù)實現(xiàn)

常用的服務(wù)器推送技術(shù)實現(xiàn)方式有以下三種。

2.1服務(wù)端代碼編程

最簡單的方法是通過服務(wù)端代碼編程實現(xiàn),響應(yīng)代碼中使用死循環(huán)。當(dāng)Web服務(wù)器接收到客戶請求后開啟一個線程執(zhí)行服務(wù)端代碼,而該方法由遲遲不肯結(jié)束,使線程無法釋放。這種方法的缺點是當(dāng)客戶端數(shù)量增加時,服務(wù)器依然會承受很大的負(fù)擔(dān)。

2.2使用特定的Web服務(wù)器

目前的趨勢是從Web服務(wù)器內(nèi)部入手,用NIO(JDK 1.4提出的java.nio包)改寫Request/Response的實現(xiàn),再利用線程池增強(qiáng)服務(wù)器的資源利用率,從而解決這個問題。JDK1.4版本最顯著的新特性就是增加了NIO,能夠以非阻塞的方式處理網(wǎng)絡(luò)的請求,這就使得在Java中只需要少量的線程就能處理大量的并發(fā)請求了。目前支持這一非J2EE官方技術(shù)的服務(wù)器有Glassfish和Jetty。

Jetty 6設(shè)計來處理大量并發(fā)連接,它使用Java語言的不堵塞I/O(java.nio)庫并且使用優(yōu)化的輸出緩沖架構(gòu)。Jetty也有一個處理長連接的殺手锏:一個稱為Continuations的特性。

Grizzly作為GlassFish中非常重要的一個項目,就是用NIO的技術(shù)來實現(xiàn)應(yīng)用服務(wù)器中的高性能純Java的HTTP引擎。Grizzly還是一個獨(dú)立于GlassFish的框架結(jié)構(gòu),可以單獨(dú)用來擴(kuò)展和構(gòu)建自己的服務(wù)器軟件。使用NIO不是一件簡單的技術(shù),它的一些特點使得編程的模型比原來阻塞的方式更為復(fù)雜。

2.3使用框架

基于Java的成熟的服務(wù)器推送框架有DWR(Direct Web Remoting)。DWR是開源的基于Apache許可協(xié)議的解決方案,它通過將服務(wù)器端的Java代碼映射稱瀏覽器端可使用的JavaScript來實現(xiàn)遠(yuǎn)程調(diào)用,本質(zhì)上還是Ajax實現(xiàn)。DWR從2.0開始增加了服務(wù)器

推送功能[5]。

Java平臺上Ajax-RPC還有Dojo、Comet4J、Pushlet等框架,但DWR相對成熟且功能完善[6]。DWR可以將Java對象中需要遠(yuǎn)程調(diào)用的public方法自動轉(zhuǎn)換成瀏覽器端可直接調(diào)用的JavaScript代碼,這些代碼發(fā)出的請求由指定的DWR Servlet處理后自動直接調(diào)用相應(yīng)的Java方法。這樣整個過程開發(fā)者不需要直接處理XMLHttpRequest也不需要處理方法參數(shù)或轉(zhuǎn)化返回值,都由DWR自動實現(xiàn)。這種實現(xiàn)方式技術(shù)成熟,配置簡單,DWR與Spring、Struts2、Ext JS都能整合。

3結(jié)束語

通過服務(wù)器推送技術(shù),基于Web實現(xiàn)的在線通信、實時監(jiān)控、實時數(shù)據(jù)傳輸?shù)葢?yīng)用有了更好的用戶體驗,當(dāng)服務(wù)器端數(shù)據(jù)發(fā)生變化時,可以自動將變化更新到用戶的瀏覽器,無需用戶手動刷新。與單純的Web程序相比,開發(fā)服務(wù)器推送應(yīng)用還是具有一定的難度,開發(fā)者選擇使用服務(wù)器推送技術(shù)時應(yīng)充分考慮服務(wù)器性能、連接數(shù)、網(wǎng)絡(luò)的確定性等因素。

參考文獻(xiàn):

[1]孫清國,朱瑋.Web應(yīng)用中的服務(wù)器推送技術(shù)研究綜述[J].計算機(jī)系統(tǒng)應(yīng)用,2008(11):11-13.

[2]張俊,白志平,白英彩,等.Netscape的PUSH/PULL機(jī)制及其應(yīng)用[J].微型電腦應(yīng)用,1998(1):80-81.

[3] HicksonI.HTML5標(biāo)準(zhǔn)文檔[EB/OL]. [2012-2-14].http://www.w3.org/TR/html5/.

[4]周婷.基于HTTP長連接的“服務(wù)器推”技術(shù)[EB/OL].(2007-08-31)[2012-02-11]. https://www.ibm.com/developerworks/cn/web/ wa-lo-comet/.

[5] DWR.Reverse for Ajax [EB/OL]. (2011-06-28)[2012-02-11].http://directwebremoting.org/dwr/documentation/reverse-ajax/index.html.

[6]龔波,馮軍.DWR實戰(zhàn)[M].北京:人民郵電出版社,2009.

文昌市| 宜兰市| 张家口市| 巴东县| 沂源县| 青河县| 靖边县| 尤溪县| 玉门市| 辽阳市| 湘乡市| 务川| 山西省| 牙克石市| 措美县| 张掖市| 元江| 大埔区| 云南省| 马山县| 方城县| 盐城市| 西丰县| 岗巴县| 泰州市| 松桃| 合江县| 通河县| 榆林市| 台中市| 射阳县| 衡东县| 隆化县| 绥德县| 新泰市| 康定县| 龙胜| 成安县| 慈溪市| 孙吴县| 法库县|