反向Ajax技術

  反向Ajax的基本概念是客戶端不必從服務器獲取信息,服務器會把相關信息直接推送到客戶端。這樣做的目的是解決Ajax傳統模型所到來的限制,實時信息很難從技術上解決。原因是客戶端必須聯繫服務器,主動詢問是否存在變更,如果有變更就會更新頁面。雖然可以非常快速王城這個操作,我們需要的是服務器聯繫查看其頁面的所有瀏覽器,並通告所發生的變更。

 

  反向Ajax是哭胡這個限制的一種方式。像Ajax本身一樣,這不是一門專門的技術,而是按照不尋常方式組合使用已有的技術達到不尋常的效果。現在總共有三種DWR支持的技術可以輔助完成這種技術,其中兩種技術都屬於“主動的”反向Ajax,第三種被認爲是“被動的”反向Ajax。

 

1.輪詢:
假設有個未使用Ajax的web頁面,使用<meta>刷新標籤,每隔數秒就更新這個頁面。這就是所說的輪詢,客戶端定時輪詢服務器,看是否存在更新,並且顯示服務器傳回的當前信息。在網頁上,使用一些簡單的JavaScript代碼以持續地更新頁面,就可以實現相同的事情。確實能夠從表面實現所謂的推送,這個就是輪詢技術。

在Ajax中,事件流會更加複雜,但是實質上是一樣的,輪詢技術是兩個主動反向Ajax方法中的一種,客戶端在每個時間週期內向服務器發送請求,看看服務器端有沒有數據更新,如果有,就像服務器請求數據。

 

2.服務器推:

第二種主動式反向Ajax方法是Comet,這時一種基於HTTP長連接的服務器推動方式。客戶端向服務器發送請求後,服務器將數據通過response發送給客戶端,但並不會將response關閉,而是一直通過response將最新的數據發送給客戶端瀏覽器,知道客戶端瀏覽器關閉。使用Ajax實現“服務器推”與傳統的AJAX應用不同之處在於:

1.服務器端會阻塞請求知道有數據傳遞或超時才返回。

2.客戶端JavaScript響應處理函數會在處理完服務器返回的信息後,再次發出請求,重新建立連接。

3.當客戶端處理接收的數據、重新建立連接時,服務器端可能有新的數據到達:這些信息會被服務器端保存直到客戶端重新建立來凝結,客戶端會一次把當前服務器端所有信息取回。

 

 

3.回傳:

PiggyBack(回傳)方法是DWR提供的一種"被動式"方法。服務器端將最新的數據排列成隊列,然後等待客戶端下一次請求,接收到請求後將等待更新的數據發給客戶端。DWR會使用某人的設置是PiggyBack,所有在默認情況下,啓動反向Ajax時,不會導致服務器超載。

 

反向Ajax的配置與實現:

要讓DWR程序支持反向Ajax,只需要在web.xml中DWRServlet裏面添加一個初始化參數,添加內容

<init-param>
 <param-name>activeReverseAjaxEnabled</param-name>
 <param-value>true</param-value>
</init-param>

如果應用的是輪詢技術,則需要添加中下參數:

<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor
</param-value>

</init-param>

除了上述配置,爲啓動反向Ajax,在頁面中還需要一些JavaScript代碼,
dwr.engine.setActiveReverseAjax(true);

 

這樣就可以使用反向Ajax技術了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章