通过MVC发送服务器发送的事件,同时获得结果和错误 [英] Server-Sent Events via MVC, get simultaneously result and error

查看:125
本文介绍了通过MVC发送服务器发送的事件,同时获得结果和错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图获得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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆