2013-09-22 59 views
3

我有一個ASP.NET MVC應用程序,我正在使用服務器發送的事件。該應用程序工作正常,但我有一些關於它如何工作的問題。 以下是控制器代碼。服務器發送的事件如何與ASP.NET MVC一起使用?

public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 
     public ActionResult Index() 
     { 
      ViewBag.Message = "SSE WITH ASP.NET MVC"; 
      return View(); 
     } 
     public ActionResult Message() 
     { 
      var result = string.Empty; 
      var sb = new StringBuilder(); 
      sb.AppendFormat("data: {0}\n\n", DateTime.Now.ToString()); 
      return Content(sb.ToString(), "text/event-stream"); 

     } 
    } 

下面是視圖代碼。

<script> 

    function contentLoaded() { 
     var source = new EventSource('home/message'); 
     //var ul = $("#messages"); 
     source.onmessage = function (e) { 

      var li = document.createElement("li"); 
      var returnedItem = e.data; 
      li.textContent = returnedItem; 
      $("#messages").append(li); 
     } 
    }; 

    window.addEventListener("DOMContentLoaded", contentLoaded, false); 
</script> 
<h2>@ViewBag.Message</h2> 
<p> 
    SSE WITH ASP.NET MVC 
</p> 
<ul id="messages"> 
</ul> 

我的問題是:1。 的時間只得到每3秒更新一次。爲什麼這樣? 2.如何確定控制器動作被調用的頻率?

回答

10

時間只有每3秒更新一次。爲什麼這樣?

因爲你Controller被返回ActionResult包含一個單一的數據,然後關閉連接,所以瀏覽器waits 3 seconds,然後重新打開它。

如何確定控制器動作被調用的頻率?

與確定使用循環和delays調用其他方法的頻率相同。

SSE是服務器發送的事件,您管理從服務器端所有的東西,它只會正確,如果你明確地保持連接開放的工作,否則,你不妨做AJAX輪詢從客戶端來代替。

+1

感謝您的回答。現在我對連接有了更好的瞭解。在那種情況下,當使用SSE時,典型的Controller操作將如何?你有沒有任何的例子,或者你可以提供給我一個解釋鏈接的地方。 – ckv

+4

OP的代碼似乎基於這篇博文http://blogs.microsoft.co.il/gilf/2012/04/10/using-html5-server-sent-events-with-json-and-aspnet- mvc /完全錯過了服務器發送事件的要點。 – Darragh

+1

@ckv請參閱[本](http://stackoverflow.com/a/35678190/111794)。 –

相關問題