Asp.net mvc 3 如何使用.NET在MVC3中实现服务器发送的事件?
我想在MVC.NET中使用SSE创建一个提要应用程序。我在网上浏览了一下,但找不到在MVC中实现SSE的示例或方法。我开发了一个非常脏的解决方案,其中一个视图调用一个控制器,该控制器调用第二个视图,第二个视图推送到第一个视图。我希望有人能帮忙。谢谢。看一看。设置和运行起来非常容易,ASP.NET中有很多示例可以帮助您入门。如果ASP.NET WebApi是一个选项,您可以签出我的库ServerSentEvents4Net。代码已启动,也可在上使用。这里有一个在使用中实现的示例(它也适用于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
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线程?据我所知,服务器必须为每个客户端打开响应。我见过的一些糟糕的例子在控制器动作中使用了无限循环,但这永远不会起作用。我只是想知道你是怎么做到的。