【问题标题】:How do server-sent events work with ASP.NET MVC?服务器发送的事件如何与 ASP.NET MVC 一起使用?
【发布时间】:2013-09-22 05:01:37
【问题描述】:

我有一个 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. 如何确定控制器动作的调用频率?

【问题讨论】:

    标签: c# asp.net-mvc html


    【解决方案1】:

    时间仅每 3 秒更新一次。为什么会这样?

    因为你的Controller返回的是包含单个数据的ActionResult然后关闭连接,所以浏览器waits 3 seconds再重新打开。

    如何确定控制器动作的调用频率?

    使用循环和delays,您可以确定调用任何其他方法的频率。

    SSE 是 Server 发送的事件,您从服务器端管理所有这些东西,只有当您明确保持连接打开时它才能正常工作,否则您也可以从服务器端进行 AJAX 轮询而是客户端。

    【讨论】:

    • 感谢您的回答。现在我对这种联系有了更好的了解。在那种情况下,当使用 SSE 时,典型的 Controller 操作会是什么样子?你有任何例子吗,或者你能给我一个解释它的链接。
    • OP 的代码似乎是基于这篇博文blogs.microsoft.co.il/gilf/2012/04/10/… 完全忽略了服务器发送事件的要点。
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多