如何在使用.NET的MVC3中实现服务器发送事件(Server Sent Events)?

3

我希望能够使用MVC .NET中的SSE开发一个动态更新应用。我在网上搜索了很多,但是没有找到关于如何在MVC中实现SSE的示例或方法。我开发了一个比较糟糕的解决方案,其中一个视图调用一个控制器,该控制器再调用第二个视图,然后第二个视图将内容推送到第一个视图。希望有人能提供帮助。谢谢。

3个回答

1

这里有一个关于如何在 中使用 实现 的例子(同样适用于 MVC3)。 控制器部分:

 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 src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script type="text/javascript">

            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>

输出:

enter image description here


1
如果ASP.NET WebApi是一个选项,您可以查看我的库ServerSentEvents4Net。代码已经上传到Github,也可以在Nuget上获得。

你如何避免为每个连接的客户端阻塞ASP线程?据我所知,服务器必须为每个客户端保持响应开放。我见过一些糟糕的例子在控制器操作中使用无限循环,但那永远不会起作用。我只是想知道你是如何做到的。 - Rob Kent

1

看一下SignalR。它非常容易设置和运行,并且ASP.NET中有很多示例,可以让你开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接