.Net MVC 實現長輪詢


什么是長輪詢?

    長輪詢是“服務器推”技術實現方式的一種,可以將服務端發生的變化實時傳送到客戶端而無須客戶端頻繁的地刷新、發送請求。

長輪詢原理?

    客戶端向服務器發送Ajax請求,服務器接收到請求后,保持連接不返回消息,直到進行相關處理完畢后才返回響應信息並關閉連接,客戶端接收到響應信息后,進行相關處理,處理完畢后再想服務器發送新的請求。

長輪詢的應用場景?

    長輪詢常應用於Web及時通訊、監控、即時報價系統等需要實時將服務端的變化發送到客戶端的場景。

長輪詢的優缺點?

優點:無消息時不會頻繁的向服務器發送請求。

缺點:服務器保持連接比較耗資源

實現:

前台代碼:

我們在回調中,再次調用函數,使其在每次請求關閉后,開始下一次請求。

<div id="container"></div>
<script type="text/javascript">
    $(function () {
        function longPolling() {
            $.getJSON("/DateTime/GetTime", function (json) {
                $("#container").append(json.date + "<br/>");
                longPolling();
            });
        };
        longPolling();
    });
</script>

后台代碼:

我們后台Controller要使用異步,繼承AsyncController基類

public class DateTimeController : AsyncController
    {
        public void GetTimeAsync()
        {
            //計時器,5秒種觸發一次Elapsed事件        
            System.Timers.Timer timer = new System.Timers.Timer(5000);
            //告訴.NET接下來將進行一個異步操作       
            AsyncManager.OutstandingOperations.Increment();
            //訂閱計時器的Elapsed事件    
            timer.Elapsed += (sender, e) =>
            {  //保存將要傳遞給GetTimeCompleted的參數                
                AsyncManager.Parameters["nowdate"] = e.SignalTime;
                //告訴ASP.NET異步操作已完成,進行GetTimeCompleted方法的調用               
                AsyncManager.OutstandingOperations.Decrement();
            };
            //啟動計時器       
            timer.Start();
        }
        public ActionResult GetTimeCompleted(DateTime nowdate)
        {
            return Json(new { date = nowdate.ToString("HH:mm:ss") + "  Welecom " }, JsonRequestBehavior.AllowGet);
        }
    }


免責聲明!

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



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