輪詢與長輪詢 淺析


 

輪詢:說白了就是客戶端定時去請求服務端,  是客戶端主動請求來促使數據更新;

長輪詢:說白了 也是客戶端請求服務端,但是服務端並不是即時返回,而是當有內容更新的時候才返回內容給客戶端,從流程上講,可以理解為服務器向客戶端推送內容;

 

從中大家可以看出區別:

輪詢:

1:大量耗費服務器內存和寬帶資源,因為不停的請求服務器,很多時候 並沒有新的數據更新,因此絕大部分請求都是無效請求

2:數據不一定是實時更新,要看設定的請求間隔,基本會有延遲。

 

長輪詢:

1:解決了輪詢的兩個大問題,數據實時更新;

2:唯一的缺點是服務器在掛起的時候比較耗內存;

總體而言,比輪詢進步了一大大大步

 

廢話不多說,上代碼(最簡單的小例子)

客戶端

<body>
    <label id="lbLongPolling"></label>
    <br />
    <label id="lbNoLongPolling"></label>
    <script>
        $(function () {
           //長輪詢,請求服務端,等到響應了,再次請求
            var SendLongPolling = function () {
                $.get("../Home/LongPolling", function (data) {
                    debugger;
                    $("#lbLongPolling").html("長輪詢:" + data);
                    SendLongPolling();
                });
            };
            SendLongPolling();


            //輪詢,不管三七21,每隔1秒就請求一次
            setInterval(function () {
                debugger;
                $.get("../Home/NoLongPolling", function (data) {
                    debugger;
                    $("#lbNoLongPolling").html("輪詢:" + new Date().toLocaleString());
                });
            }, 1000);
        })
    </script>
</body>
View Code

 

服務端:

        /// <summary>
        /// 長輪詢,模擬掛起的操作,服務器每秒會有更新,然后返回給客戶端實時數據
        /// </summary>
        /// <returns></returns>
        public ActionResult LongPolling()
        {
            while (true)
            {
                Thread.Sleep(1000);
                return Content(DateTime.Now.ToString());
            }
        }

        /// <summary>
        /// 輪詢,只要客戶端請求就返回數據
        /// </summary>
        /// <returns></returns>
        public ActionResult NoLongPolling()
        {
            return Content(DateTime.Now.ToString());
        }
View Code

 

例子雖然小,但是應該看得比較清楚了,服務端掛起的那里 也許模擬的不太好,期待園友們指正交流!

 效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM