首頁  >  文章  >  後端開發  >  有關.Net MVC長輪詢的實作方法

有關.Net MVC長輪詢的實作方法

巴扎黑
巴扎黑原創
2018-05-23 16:22:131862瀏覽

這篇文章主要為大家詳細介紹了.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);
    }
  }

以上是有關.Net MVC長輪詢的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn