什么是長輪詢?
長輪詢是“服務器推”技術實現方式的一種,可以將服務端發生的變化實時傳送到客戶端而無須客戶端頻繁的地刷新、發送請求。
長輪詢原理?
客戶端向服務器發送Ajax請求,服務器接收到請求后,保持連接不返回消息,直到進行相關處理完畢后才返回響應信息并關閉連接,客戶端接收到響應信息后,進行相關處理,處理完畢后再想服務器發送新的請求。
長輪詢的應用場景?
長輪詢常應用于Web及時通訊、監控、即時報價系統等需要實時將服務端的變化發送到客戶端的場景。
長輪詢的優缺點?
優點:無消息時不會頻繁的向服務器發送請求。
缺點:服務器保持連接比較耗資源
實現:
前臺代碼:
我們在回調中,再次調用函數,使其在每次請求關閉后,開始下一次請求。
1
2
3
4
5
6
7
8
9
10
11
12
|
< 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基類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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); } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。