DWR中的push機制-Reverse_Ajax_第1頁
DWR中的push機制-Reverse_Ajax_第2頁
DWR中的push機制-Reverse_Ajax_第3頁
DWR中的push機制-Reverse_Ajax_第4頁
DWR中的push機制-Reverse_Ajax_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、作者:HenryDWR從2.0開始増加了 push功能甩就是在異步傳輸?shù)那闆r下可以從Web-Server®發(fā)送數(shù)據(jù)到 Browser.我們知迄Web的訪問機制夭生是設(shè)計用來pull數(shù)據(jù)的,也就是只允許Browser®主動發(fā)起請求,server 是被動的響應(yīng)不允許Server向Browser發(fā)出一connection請求甩乩丫說沒有為server: Browser push數(shù)據(jù)提供設(shè)計實現(xiàn).雖然沒有直接的實現(xiàn)方法,卻可以使用一些變通的方式完成類似的功能:1. PollingPolling其實就是輪詢,是通過Browse在一個相對短的間隔時間內(nèi)仮復(fù)向Server發(fā)出請求,然 后

2、更新頁面,這種方式?jīng)]有什么新鮮的,只是需要瀏覽器端做一些工作就可以,哪怕沒有太多服務(wù)器端的配 置也沒問題輪詢的方式對于服務(wù)器來說會依據(jù)不同的訪問間隔而產(chǎn)生不同程度的額外負載,因為每次: 問都有重新建立連接的過程.2. CometComet方式通俗的說就是一種長連接機制(long lived http).|sj樣是由Browser®主動發(fā)起請 求,但足Server®以一種似乎耳岸常慢的響應(yīng)方式給出回答,這樣在這個期間內(nèi),服務(wù)器端可以使用同一個 con nection把要更新的數(shù)據(jù)王動發(fā)送給Browser.Comet又有很多中實現(xiàn)萬式,但是總的來說對Server 端的負載都會有

3、增加雖然對于單位操作來說海次只需要建議一connections是由丁connection丄 保持較長時間的,對于server端的資源的占用要有所増加.3. PiggybackPiggyback方式是一種半主動的方式,也就是說還是由Browsers動發(fā)出請求,但是每次請求的 響應(yīng)中除了當次的響應(yīng)之外,還會把上次請求以來已經(jīng)發(fā)生的變化同時發(fā)給Browser.也就是說,當次請 求的更新會搭戦到下一次請求的響應(yīng)中一并發(fā)回這樣,在Browser的感覺就好象上一次請求又有了更 祈但是這種感覺取決TBrowserServerft出請求的頻度如果,第二次請求遲遲沒有發(fā)出,那么上一次 的更新就不會取到.在DWR

4、2.0中可以使用Active住動)和Passive(被動)兩種工作模式,在這里我們主要討論 Active住動)模式.Active住動)模式又分為以下3種: Full Streaming Mode Early Closing Mode Polling ModeFull Streaming Mode這是Active模式下的一種默認配賈,具有很快的響應(yīng)速度,而且建立好的鏈接只有每60秒檢査一次瀏 覽器是否是活躍的.這種工作規(guī)式的E8非常簡單在Web.xml中配置DWR的時候,加上下面的內(nèi)容: <servlet><servlet-name>dwr-invoker</ser

5、vlet-name><serviet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></inic-param></servlet>然后在Browser頁面端加上下面一句就可以了 :dwrengine.s e tAc t i

6、 veReve r s eAj ax(true);需要說明的是,氏徒接會增加Server的貴源占用,角些Server比如Jetty允許住客戶端矢閉線程 (connection),在新版本中會把這種能力延伸到GlassFish和Tomcat.總之,DWR的主導(dǎo)思想是盡 量保護Server,減小負載Early Closing Mode在Browser和Server之間有Proxy或gmod_j k的情況下,需要能夠良好的工作.需要這種模式:這種 模式和Full Streaming Mode相似,以Fullf式開啟connection,但是,如果沒有輸出的情況下, 它會在一個配置好的時間內(nèi)尖閉Con

7、nection,通常這個時間是60秒.從204版開始DWR默認使用Early Closing Mode,如果要要想使用Full Streaming Mode,需 要進行如下的配置:<init-param><param-namemaxWaitAfterWritev/payrrr name <param-value>-l</param-value></init-param>這里,設(shè)置maxWaitAfterWrite是表示這個時間和Full Streaming Mode樣,設(shè)置另閉時間是60 秒.Polling ModePolling Mode

8、是一種輪詢方式,這可以避免K:時間保持連接而產(chǎn)生的對服務(wù)器資源的占用.如果要足用輪詢方式,還需要做以下的配置:<init-param><param-name>org.directwebremoting.extend ServerLoadMonitor</param-name><param-value>org directwebremoting.impl.PollingServerLoadMonitor</param-value: </init-param>默認輪詢的周期是5秒中,也就浪5000毫秒.如果想改變這個默認值需要下面的

9、配量:<init-param><param-name>disconnectedTime</param-name> <param-value>60000</param-value></init-param>這是將輪詢周期改為6000毫秒,也就是6秒.Web Push機制的作用:l.WebU備了 Push的方式,這對于很多應(yīng)用是夢寐以求的,比如,如果有一個基于Web的網(wǎng)絡(luò)聊天系統(tǒng), 如果使用Push技術(shù)可以更加滿足功能的需要,還有比如說一些需要serve端根據(jù)數(shù)據(jù)條件主動向 browser®發(fā)送數(shù)據(jù)的應(yīng)用需求周非常需

10、要這樣的功能 下面就舉一個股票報盤的例子,能夠讓Server®通過主動的方式想Browse端發(fā)送股票信息. 先說一下如何配置:1.在web.xml中配置如下內(nèi)容:<servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting .servlet. DwrServletv/servlet-class<init<param-n ame>activeReverseAjaxEnabled</param ame>

11、<param-value>true</param-value></init-param></servlet><servlet-mappi ng>< servlet-n8me>dw-invokev/servlet-n8me> <url-pattern>/dwr/*</url-pattern></servlet-mapping>2. 在dwr.xml中配置如下內(nèi)容:<allow>v! Reverse Ajax Stock push Demo Config<create

12、 creator=Hnew" jav8SCipt=”StocksPushe”><param name=,lclass'1 value=,dwr.reverse.StocksPusher,l/> </create></allow>3. 股票報盤的頁ffigetstocklnfo.html<!DOCTYPE HTML PUBLIC H-/W3C/DTD HTML 4.01 Transitional/ENlf” /TR/html4/loose.dtd"><html><h

13、ead><meta http-equiv=,Content-Type" content=Htextyhtml; charset=UTF-8H /> <title>DWR Reverse Ajax Demo : Show Stock info</title><link rel=nstylesheetH type=Htext/css" href =Hgeneric.css" /><script type='text/javascript' src=7AjaxShow/dwr/engine.js

14、'>v/scipt> <script type=,text/javascript, src=7AjaxShow/dwr/util.js'x/script><script type=,text/javascript, src=7AjaxShow/dwr/interface/StocksPusher. js1 > </script><script type=Htext/javascriptn>function beginShow() StocksPusher.beginShow();StocksPusher.se ndSt

15、ocks();function endShow()StocksPusher.closeShow();</script></head><body onload=,dwr.engine.setActiveReverseAjax(true);l,><h3>使用DWR Reverse Ajax逬行股票報盤</h3>vp>下面顯示的股票信息是可以動態(tài)變化的</p><input type=HbuttonH value="開市"onclick=,beginShow()7> <input typ

16、e=nbuttonn value=H閉市"onclick=,endShow()7> <hr><tablc stylc=nwidth:500pxH bordcr="0" cellpadding=l,On> <tr><td class=l,headName" ><b>Stock Name</bx/td><td class=”headValuy ><b>Stock Value</bx/td></tr>vtr>vtd>中移動v

17、/td> vtd>vdiv id=,zyd,>wait.</divx/tdx/tr> vt>vtd>中石彳匕v/td>vtd>vdiv id=MzshH>wait.</div></tdx/tr> vt>vtd>中石油v/td>vtd>vdiv id=,lzsy,>wait.</divx/tdx/tr> vt>vtd>海爾電器v/td>vtd>vdiv id=l'hedqH>wait.</div></tdx/tr&g

18、t; vtr> vtd>冀東水泥</td> vtd> vdiv id=,jdsn,1 >wait. </div> </td> </tr> vtd>用友軟件v/td> vtd> vdiv id=,yyrj,>wait.</div></td></tr> vt>vtd>柳鋼股份v/td>vtd>vdiv id=,llggf,>wait.</divx/tdx/tr> vtr>vtd>招商銀行v/td>vtd>

19、; vdiv id=l,zsyh">wait.</div></tdx/tr> vt>vtd>中國鐵建v/td>vtd>vdiv id=,zgtj,>wait.</divx/tdx/tr> vtr>vtd>深發(fā)展v/td> vtdxdiv id=,lsfz,>wait.</divx/tdx/tr> vtr>vtd>金山軟件v/td>vtd>vdiv id=l,jsrj,>wait.</div></tdx/tr> vtr>

20、vtd>大連實德</td>vtd>vdiv id=,dlsd">wait.</div></td></tr> vt>vtd>九寨;勾v/tdxtdxdiv id=,ljzg,>wait.</div></tdx/tr> vtd>中國平安v/td>vtd>vdiv id=,zgpa,>wait.</divx/tdx/tr> vtr> vtd>工商銀i亍v/tdxtdxdiv id=l,gsyh'1 >wait.</d

21、iv></td></tr> vt>vtd>鞍鋼股份v/td> vtd> vdiv id=>wait.</div> </td> </tr> vtr>vtd>中國航天v/td>vtd>vdiv id="zght">wait.</div></td></tr> </table><br></body></html>4.報盤的主程序StocksPusher.java,矣鍵部分在代

22、碼后面有中文注釋package dwr.reverse;import javautil.ArrayList;import java.util.Collection;import java.util .List;import org.directwebremoting.WebContext;import org.directwebremoting.WebContextFactory;import org.directwebremoting.poxy.dwUtil; import org.directwebremoting.util.Logger;/* Reverse Ajax class.* a

23、uthor Henry Hua ng*/public class StocksPusher private static boolean closeMarket = false;/* Initialize the stocklist with values.*/public StocksPusher() /* Send the Stock-Values to the file ''getStocklnfo.html11*/public void sendStocks() throws InterruptedException WebContext wctx = WebConte

24、xtFactory.get(); 這重是獲取WebContext上下文String currentPage = wctx.getCurrentPage(); 從上下文中獲取當前頁面,這些是DWR Reverse Ajax要求的必須方式Collection sessions = wctx.getScriptSessionsByPage(currentPage); 再一個page中 可能存在多個Scriptsessions,Util utilAII = new Util(sessions); /Util 是DWR 在Serve碼模擬Brower® dwr.util.js 的類,Engin

25、e也是while(true)Thread.sleep(500);if(closeMarket) break;StocksBean stock = StockPriceTracer.getNextStockInfo();utilAII.setValue(stock.getStock()f stock.getValue(); 應(yīng)魚的setValue()用法和 dwr.util.js中的setvalue()函數(shù)用法完全一樣,第一個參數(shù)足頁面Element的id,第二個參數(shù)足對該id 賦的新值System.out.printlnC'Pushing stock: 11 + stock.getSt

26、ock() + 11 = 11 + stock.getValue();public void beginShow() closeMarket = false;public void closeShow() closeMarket = true;5.還有一個類是為了模擬實時獲取股息的工具StockPriceTracer.java.tfc可能是訪問數(shù)據(jù)庫, 也可能來至衛(wèi)星的大盤數(shù)據(jù),等等,這個類是用隨機的方法獲得股票價格:package dwr.reverse;import java.util.ArrayList;import java.util .List;import java.util.Ra

27、ndom;import javautil.Stack;* Reverse Ajax class* author Henry Hua ng*/public class StockPriceTracer private static StockPriceTracer tracer = null;private List<StocksBea n> stocks = new Array List < StocksBea n>();private Stack<StocksBean> cycleStack = new Stack<StocksBean >()

28、;private StockPriceTracer()stocks.add(new StocRsBean(”zsy蔦"36.55”); stocks.add(new StocksBean(ndlsd,/ l,91.01'1);stocks.add(new StocksBean(,zsh,/ "22.59"); stocks.add(new StocksBeanflggf ,5.07M);stocks.add(new StocksBean(nhedq,/ l,71.77M);stocks.add(new StocksBean(,jdsn,/ ”31.61/)

29、;stocks.add(new StocksBeanCVyrj11, ”51.29");stocks.add(new StocksBean(nzsyh' ”52.70”); stocks.add(new StocksBean(,zgtj,/ l,16.961);stocks.add(new StocksBean(,sfz,/ M54.34M); stocks.add(new StocksBean(njsrj,/ "178.48n);stocks.add(new StocksBean(hzyd11 f "134.48”);stocks.add(new StocksBeanUjzg”,"76.32”);stocks.add(new StocksBeanCzgpa", ll80.63M); stocks.add(new StocksBeanCgsyh11, "18.79");stocks.add(new StocksBeanCggf1, "20.19”);stocks.add(new StocksBeanCzght11, n11.13n);public static StocksBean getNextStockInfo() if(null = tracer) tracer = new St

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論