• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Comet技術(shù)的WEB實時性應(yīng)用的研究

      2016-03-25 01:45劉媚王旭陽
      無線互聯(lián)科技 2016年3期

      劉媚++王旭陽

      摘要:Comet技術(shù)也稱反向AJAX技術(shù),它主要是通過服務(wù)器端主動推送,解決AJAX需定期輪詢發(fā)送消息請求連接所要消耗服務(wù)器資源的問題,給用戶實時交互使用帶來了全新的體驗。文章主要介紹Comet技術(shù)、實現(xiàn)方式、實現(xiàn)框架等,使用Comet技術(shù)完成實時系統(tǒng)的開發(fā)方法和步驟。主要是通過開源的Pushlet框架技術(shù)相結(jié)合完成網(wǎng)頁主動推送的功能,實現(xiàn)網(wǎng)頁數(shù)據(jù)實時主動呈現(xiàn)給用戶的最終效果。

      關(guān)鍵詞:Comet;AJAX;服務(wù)器推送;Web實時系統(tǒng)

      隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,瀏覽器作為Web應(yīng)用前臺的方式越來越多。人們對網(wǎng)頁的使用要求不僅僅是主動獲取的方式,更多的是希望由服務(wù)器端主動推送呈現(xiàn)用戶所需的內(nèi)容。如現(xiàn)在應(yīng)用比較多的淘寶、京東的一些主動推送服務(wù)。

      AJAX技術(shù)的出現(xiàn)使得Comet技術(shù)成為可能。AJAX技術(shù)的工作原理主要是通過異步方式在客戶端和服務(wù)器端增加了個中間層,客戶端發(fā)送請求不是所有的都直接提交給服務(wù)器端,某些請求是可以通過中間層間接完成的,這樣在一定程度上緩解了服務(wù)器的負荷。但是,AJAX最終還是需要服務(wù)器響應(yīng),實時性還是有延遲。因此,應(yīng)用AJAX技術(shù)的話,實時性還是得不到保障。所以又引入了新的技術(shù)Comet(也叫反向AJAX),Comet通過維護一條HTTP長鏈接,從而不再需要客戶端側(cè)發(fā)送請求消息,服務(wù)器端主動發(fā)送消息到瀏覽器端。

      1 Comet技術(shù)實現(xiàn)方式

      傳統(tǒng)的Ajax技術(shù)無法實現(xiàn)真正的高并發(fā)、高實時性,同時頻繁的輪詢機制服務(wù)器的開銷比較大,只能應(yīng)用在小型應(yīng)用中。所以AJAX適用并發(fā)用戶不大于200個,并且用戶不同操作的請求的實時性Web應(yīng)用中,如:用戶通過網(wǎng)頁注冊賬號,當輸入用戶名時,提示此用戶名已經(jīng)存在AJAX的典型應(yīng)用。

      Comet技術(shù)也被稱作反AJAX (Reverse AJAX)技術(shù),它主要是通過服務(wù)器端推的方式來解決AJAX中存在不確定的延遲以及需要維護大量開銷的服務(wù)器負荷問題。而通過Comet技術(shù),客戶端側(cè)則不需要主動向服務(wù)器發(fā)起消息,服務(wù)器端卻能主動將消息推送到客戶端側(cè)。

      因此,Comet被稱為“基于HTTP長連接的服務(wù)器推”。Comet技術(shù)主要是通過在服務(wù)器端和客戶端側(cè)的瀏覽器之間建立并維持一個TCP長連接保持監(jiān)聽的。當服務(wù)器側(cè)處理完客戶端發(fā)送過來的請求時,服務(wù)器端并不是馬上關(guān)閉這條連接,而是將這條連接一直保留著,當下一次有數(shù)據(jù)更新或者變動時,它能快速使服務(wù)器實時地將更新的信息通過這條連接傳送到客戶端,而無須客戶端側(cè)再次發(fā)出請求,這種方式節(jié)省了服務(wù)器端與客戶端建立與關(guān)閉連接的時間,真正實現(xiàn)了“push”模式。

      2 使用Comet技術(shù)的設(shè)計框架

      2.1

      Pushlet框架

      設(shè)計采用Pushlet框架實現(xiàn)。Pushlet框架是Comet技術(shù)應(yīng)用的開源框架。它主要是通過客戶端側(cè)發(fā)送請求,訂閱感興趣的事件。服務(wù)器端為每個客戶端分配一個可以用作會話的ID作為標記,事件源會把新產(chǎn)生的事件以多播的方式發(fā)送到訂閱者的事件隊列里。Pushlet采用基于Comet的JavaScript庫文件用于實現(xiàn)長輪詢方式的“服務(wù)器推”。

      2.2 數(shù)據(jù)層

      服務(wù)器數(shù)據(jù)推送采用開源的Pushlet框架,利用JSP技術(shù),服務(wù)器在不關(guān)閉http流的情況下推送數(shù)據(jù)到客戶端瀏覽器,基于Comet的長輪詢方式。首先每個Client會跟Server建立一個長連接,服務(wù)器會保存客戶端Session即入隊,Server會每隔一段時間例如每5秒對數(shù)據(jù)庫進行查詢,然后根據(jù)隊列中的對象進行廣播,把數(shù)據(jù)Push到每個Client。性能說明:Server每5秒只對數(shù)據(jù)庫進行1次查詢,然后把數(shù)據(jù)廣播給所有連接的客戶端,這區(qū)別于AJAX每個客戶端都去對數(shù)據(jù)庫進行查詢,Push的性能要遠遠高于AJAX拉取的方式。在Push的過程中程序會頻繁開關(guān)數(shù)據(jù)庫,為了減少連接創(chuàng)建時間,提高性能,連接采用開源連接池組件Proxool。

      2.3 業(yè)務(wù)邏輯層

      主要使用struts2框架來處理用戶請求,實現(xiàn)具體邏輯關(guān)系和頁面跳轉(zhuǎn)。

      2.4 表現(xiàn)層

      圖形化報表呈現(xiàn)用JfreeChart和FusionCharts作比較,F(xiàn)LASH格式的報表在色彩表現(xiàn)要比JfreeChart效果好,并且具有動態(tài)效果,推薦報表的呈現(xiàn)方式采用FusionCharts圖表控件。前端頁面展示采用Jpolite框架,JPolite將內(nèi)容展示和事件相分離。

      3 使用Pushlet開發(fā)Comet風(fēng)格的Web應(yīng)用

      (l)首先當然要獲取pushlet開發(fā)包。http://sourceforge.net/projects/pushlets/files/pushlets/2.0.4/pus hlet-2.0.4.zip/download下載后解壓,獲取lib下的pushlet.Jar,pushletclient.Jar及web apps\pu shlet \WEB-INF\classes下的log4j. properties,pushlet. properties、sources. propertieS。

      (2)在src目錄中添加log4j.properties,pushlet.properties,sources.properties,后續(xù)對sources.properties進行修改和配置。

      (3)配置Web. xml。

      (4)創(chuàng)建自己的事件源。

      創(chuàng)建事件(pullEvent)中,業(yè)務(wù)部分就寫在pullEvent()方法中即可,這個方法會被定時調(diào)用。protected EventpullEvent(){

      Event

      event

      =Event. creat eDat aEvent("/fornew/push"):∥事件與jsp頁面“綁定” StringBufferstr - new StringBuffer(“工單總量[”).append(i++).append(]):str. append (this.getRandomStr()):

      try{//轉(zhuǎn)碼,否則中文在頁面出現(xiàn)亂碼,且會使頁面“掉線”event. setField("hw", new

      String (str.toString(). getBytes ("UTF8"),

      "IS08859-1"》:

      catch (UnsupportedEncodingException e) {

      e.printStackTrace():

      return event;

      )∥產(chǎn)生隨機數(shù),便于頁面觀察

      public String getRandomStr(){

      Random random = new Random();

      return Math. abs (random. nextlnt())+"": )

      (5)在上面加入的sources. properties中配置事件源。

      配置如下:

      sourcel-com. fornew. PushLet $PushEvent

      (6)編寫index.jsp頁面如下。

      pushlet源碼中DEMO測試成功的參考頁面如圖1所示。

      4 結(jié)語

      本文通過采用Comet技術(shù)開源的Pushlet框架實現(xiàn)Web的實時系統(tǒng),給用戶帶來了全新的交互性和良好的界面感知。為了將Comet技術(shù)與現(xiàn)有技術(shù)架構(gòu)相結(jié)合,采用開源的plush框架設(shè)計結(jié)構(gòu),從而保證節(jié)點快速地加入、退出、跳轉(zhuǎn)等,提高交互的性能。為了解決資源鏈接數(shù)的優(yōu)化設(shè)置,本文采用了Tomcat中間件的應(yīng)用,以達到最佳資源數(shù)的應(yīng)用,最終更大化地提升系統(tǒng)性能。由于Comet技術(shù)鏈接數(shù)資源有限,只能應(yīng)用于并發(fā)數(shù)較少的鏈接使用,當并發(fā)數(shù)較多的情況出現(xiàn),實時性就得不到保障。下一步可以考慮將Comet技術(shù)與多并發(fā)分布式技術(shù)相結(jié)合,應(yīng)用于多終端、多用戶的多連接實時呈現(xiàn)。

      交城县| 耒阳市| 宁远县| 浦江县| 邹城市| 永城市| 赤城县| 渭南市| 宾阳县| 温泉县| 鄂尔多斯市| 广德县| 正镶白旗| 略阳县| 德格县| 治多县| 沽源县| 应城市| 南靖县| 大荔县| 景谷| 任丘市| 南充市| 吴桥县| 通榆县| 宁德市| 日土县| 太仆寺旗| 延津县| 林州市| 华蓥市| 霍州市| 宁乡县| 时尚| 明溪县| 枣阳市| 伊宁县| 丘北县| 平遥县| 永年县| 佛坪县|