反向ajax是什嗎?如何?反向ajax?(精選版)

來源:互聯網
上載者:User

你知道反向ajax嗎?知道反向ajax是怎麼實現的嗎?都不知道,還不快來看這篇文章,介紹了關於反向ajax的詳細資料。下面開始閱讀本篇

什麼是反向ajax

反向 Ajax (Reverse Ajax) 本質上則是這樣的一種概念:能夠從伺服器端向用戶端發送資料。在一個標準的 HTTP Ajax 請求中,資料是發送給伺服器端的,反向 Ajax 可以某些特定的方式來類比發出一個 Ajax 請求,這樣的話,伺服器就可以儘可能快地向用戶端發送事件(低延遲通訊)。

反向ajax實現方式

1. 輪詢 (Polling)

輪詢其實是一種最笨的實現反向ajax的方法:用javascript在用戶端定時發送ajax請求。

setInterval(function() {     $.getJSON('events', function(events) {         console.log(events);     }); }, 2000);12345

為了儘快地獲得伺服器端事件,輪詢的間隔(兩次請求相隔的時間)必須儘可能地小。這樣做的缺點就十分明顯:如果間隔減小的話,用戶端瀏覽器就會發出更多的請求,這些請求中的許多都不會返回任何有用的資料,而這將會白白地浪費掉頻寬和處理資源。

2.PiggyBack(捎帶輪詢)

捎帶輪詢是一種比輪詢更加聰明的做法,因為它會刪除掉所有非必需的請求(沒有返回資料的那些)。

它是一種半主動的方式,也就是說還是由Browser主動發出請求,但是每次請求的響應中除了當次的響應之外,還會把上次請求以來已經發生的變化同時發給Browser。

也就是說,當次請求的更新會搭載到下一次請求的響應一併發回。這樣,在Browser的感覺就好像上一次請求又有了更新。但是這種感覺取決於Browser向Server發出請求的頻率。如果,第二次請求遲遲沒有發出,那麼上一次的更新就不會取到。

3. Comet(伺服器推)

這是一種基於 HTTP 長串連的“伺服器推”技術。

實現方式主要有下面兩種:

1)HTTP 流(HTTP Streaming)

在頁面裡嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長串連的請求或是採用xhr請求,伺服器端就能源源不斷地往用戶端輸入資料。

優點:訊息即時到達,不發無用請求;管理起來也相對方便。

缺點:伺服器維護一個長串連會增加開銷。

執行個體:Gmail聊天

<script type="text/javascript">    $(function () {        (function iframePolling() {            var url = "${pageContext.request.contextPath}/communication/user/ajax.mvc?timed=" + new Date().getTime();            var $iframe = $('<iframe id="frame" name="polling" style="display: none;" src="' + url + '"></iframe>');            $("body").append($iframe);            $iframe.load(function () {                $("#logs").append("[data: " + $($iframe.get(0).contentDocument).find("body").text() + " ]<br/>");                $iframe.remove();                // 遞迴                iframePolling();            });        })();        });</script>

2)HTTP 長輪詢(HTTP Long Polling)

這種情況下,由用戶端向伺服器端發出請求並開啟一個串連。這個串連只有在收到伺服器端的資料之後才會關閉。伺服器端發送完資料之後,就立即關閉串連。用戶端則馬上再開啟一個新的串連,等待下一次的資料。(想看更多就到topic.alibabacloud.comAJAX開發手冊欄目中學習)

優點:在無訊息的情況下不會頻繁的請求,耗費資源小。

缺點:伺服器hold串連會消耗資源,返回資料順序無保證,難於管理維護。

執行個體:WebQQ、Hi網頁版、Facebook IM。

<script type="text/javascript">            $(function () {                (function longPolling() {                    $.ajax({                        url: "${pageContext.request.contextPath}/communication/user/ajax.mvc",                        data: {"timed": new Date().getTime()},                        dataType: "text",                        timeout: 5000,                        error: function (XMLHttpRequest, textStatus, errorThrown) {                            $("#state").append("[state: " + textStatus + ", error: " + errorThrown + " ]<br/>");                            if (textStatus == "timeout") { // 請求逾時                                    longPolling(); // 遞迴調用                                // 其他錯誤,如網路錯誤等                                } else {                                     longPolling();                                }                            },                        success: function (data, textStatus) {                            $("#state").append("[state: " + textStatus + ", data: { " + data + "} ]<br/>");                            if (textStatus == "success") { // 請求成功                                longPolling();                            }                        }                    });                })();            });        </script>

本篇文章到這就結束了(想看更多就到topic.alibabacloud.comAJAX使用手冊欄目中學習),有問題的可以在下方留言提問。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.