Asp.net mvc 3 如何使用.NET在MVC3中实现服务器发送的事件?

Asp.net mvc 3 如何使用.NET在MVC3中实现服务器发送的事件?,asp.net-mvc-3,pushviewcontroller,server-sent-events,sse,mvc4,.net,Asp.net Mvc 3,Pushviewcontroller,Server Sent Events,Sse,Mvc4,.net,我想在MVC.NET中使用SSE创建一个提要应用程序。我在网上浏览了一下,但找不到在MVC中实现SSE的示例或方法。我开发了一个非常脏的解决方案,其中一个视图调用一个控制器,该控制器调用第二个视图,第二个视图推送到第一个视图。我希望有人能帮忙。谢谢。看一看。设置和运行起来非常容易,ASP.NET中有很多示例可以帮助您入门。如果ASP.NET WebApi是一个选项,您可以签出我的库ServerSentEvents4Net。代码已启动,也可在上使用。这里有一个在使用中实现的示例(它也适用于MVC3

我想在MVC.NET中使用SSE创建一个提要应用程序。我在网上浏览了一下,但找不到在MVC中实现SSE的示例或方法。我开发了一个非常脏的解决方案,其中一个视图调用一个控制器,该控制器调用第二个视图,第二个视图推送到第一个视图。我希望有人能帮忙。谢谢。

看一看。设置和运行起来非常容易,ASP.NET中有很多示例可以帮助您入门。

如果ASP.NET WebApi是一个选项,您可以签出我的库ServerSentEvents4Net。代码已启动,也可在上使用。

这里有一个在使用中实现的示例(它也适用于
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>
查看部件:

 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>

函数contentLoaded(){
var source=新事件源(“主页/消息”);
//var ul=$(“#消息”);
source.onmessage=函数(e){
var li=document.createElement(“li”);
var returnedItem=e.data;
li.textContent=returnedItem;
$(“#消息”)。附加(li);
}
};
addEventListener(“DOMContentLoaded”,contentLoaded,false);

带ASP.NET MVC的SSE

输出:

 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>

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