通过MVC发送服务器发送的事件,同时获得结果和错误 [英] Server-Sent Events via MVC, get simultaneously result and error
问题描述
我试图获得SSE技术并且无法解决一个问题。始终触发两个事件onmessage和错误。我收到了有效日期并同时收到错误消息。为什么会这样,以及如何解决这个问题?如何延长连接的实时时间polltransport request??
这里服务器端
public class HomeController:Controller
{
public ActionResult Message()
{
JavaScriptSerializer ser = new JavaScriptSerializer();
var serializedObject = ser.Serialize(new {item =fuck,message =hello});
var sb = new StringBuilder();
sb.AppendFormat(data:{0} \ n\ n,serializedObject);
返回内容(sb.ToString(),text / event-stream);
}
public ActionResult SEEIndex()
{
return View();
}
}
此处客户端javascript
$(document).ready(function(){
var serverSentEvents = new window.EventSource('/ Home / Message') ; // home / message / api / Event
serverSentEvents.onmessage = function(e){
//$ (\"#messages\").append(e.data.item +' < br />');
var data = JSON.parse(e.data);
console.log('是的!我们得到它,这是你的数据',data.item) ;
};
serverSentEvents.onerror = function(e){
console.log('error');
};
if(typeof(window.EventSource)!==undefined){
console.log('Yes!Server-sent events support!');
}
else {
console.log('抱歉!没有服务器发送的事件支持..');
}
});
这里的屏幕控制台日志和网络标签<你需要不断写入 Response
对象而不是返回结果:
使用System.Threading;
public class HomeController:Controller {
public ActionResult SEEIndex(){
return View();
}
public void Message(){
Response.ContentType =text / event-stream;
do {
Response.Write(data:understandably\\\
);
Response.Write(data:frustrated\\\
);
Response.Write(\ n); // double newline表示事件结束
Response.Flush();
Thread.Sleep(2000); //等待2秒再写入
}而(true)
}
}
返回结果会关闭连接,触发 EventSource.onerror
。
参见< a href =https://stackoverflow.com/a/35678190/111794>这里了解更多细节。
I tried to get SSE technology and couldn't resolve one trouble. Always triggered two event onmessage and error. I have getting valid date and simultaneously error message. Why this happening and how to resolve this ? How to prolong live time of connection "polltransport request" ??
Here server side
public class HomeController : Controller
{
public ActionResult Message()
{
JavaScriptSerializer ser = new JavaScriptSerializer();
var serializedObject = ser.Serialize(new { item = "fuck", message = "hello" });
var sb = new StringBuilder();
sb.AppendFormat("data: {0}\n\n", serializedObject);
return Content(sb.ToString(), "text/event-stream");
}
public ActionResult SEEIndex()
{
return View();
}
}
Here client javascript
$(document).ready(function () {
var serverSentEvents = new window.EventSource('/Home/Message'); //home/message /api/Event
serverSentEvents.onmessage = function (e) {
//$("#messages").append(e.data.item + '<br />');
var data = JSON.parse(e.data);
console.log('Yes! We get it, here is you data', data.item);
};
serverSentEvents.onerror = function (e) {
console.log('error');
};
if (typeof (window.EventSource) !== "undefined") {
console.log('Yes! Server-sent events support!');
}
else {
console.log('Sorry! No server-sent events support..');
}
});
Here screens of console log and network tabs in google chrome browser
Your server-side code needs to continually write to the Response
object instead of returning a result:
using System.Threading;
public class HomeController : Controller {
public ActionResult SEEIndex() {
return View();
}
public void Message() {
Response.ContentType = "text/event-stream";
do {
Response.Write("data: understandably\n");
Response.Write("data: frustrated\n");
Response.Write("\n"); //double newline signals the end of an event
Response.Flush();
Thread.Sleep(2000); //wait 2 seconds before writing again
} while (true)
}
}
Returning a result closes the connection, which triggers the EventSource.onerror
.
See here for some more details.
这篇关于通过MVC发送服务器发送的事件,同时获得结果和错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!