這篇文章主要為大家詳細介紹了.Net MVC實現長輪詢的相關資料,具有一定的參考價值,感興趣的小夥伴們可以參考一下
什麼是長輪詢?
長輪詢是“伺服器推”技術實現方式的一種,可以將服務端發生的變化即時傳送到用戶端而無須用戶端頻繁的地重新整理、發送請求。
長輪詢原理?
用戶端向伺服器發送Ajax請求,伺服器接收到請求後,保持串連不返回訊息,直到進行相關處理完畢後才返迴響應資訊並關閉串連,用戶端接收到響應資訊後,進行相關處理,處理完畢後再想伺服器發送新的請求。
長輪詢的應用情境?
長輪詢常應用於Web及時通訊、監控、即時報價系統等需要即時將服務端的變化發送到用戶端的情境。
長輪詢的優缺點?
優點:無訊息時不會頻繁的向伺服器發送請求。
缺點:伺服器保持串連比較耗資源
實現:
前台代碼:
我們在回調中,再次調用函數,使其在每次請求關閉後,開始下一次請求。
<p id="container"></p><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); } }