服务器发送的事件如何使用 ASP.NET MVC

本文关键字:何使用 ASP NET MVC 事件 服务器 | 更新日期: 2023-09-27 18:32:27

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

服务器发送的事件如何使用 ASP.NET MVC

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

由于您的Controller返回包含单个数据的ActionResult,然后关闭连接,因此浏览器会等待 3 秒钟,然后重新打开它。

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

与确定调用任何其他方法的频率相同,包括循环和延迟。

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