服务器发送的事件在Firefox中不会连续调用EventSource

时间:2013-09-29 11:33:10

标签: jquery asp.net html5 firefox server-sent-events

我正在asp.net项目中处理Server sent Events(Html5)。代码非常简单,因为它从服务器接收数据并在DIV中显示它。 只有当我在FireFox上运行代码时才会出现问题,其中不会一直调用Eventsource,Firebug显示2个请求或12个请求,有时只显示1个请求。 当我在chrome上测试代码时,代码工作正常,我得到了无限的请求,因为我需要。 我的代码是:

<script type="text/javascript">
$(function()
{
if (window.EventSource == undefined)
    {
        $('#targetDiv').html('Your Browser Cant support Server Side Event');
        return;
    }
var source = new EventSource('GetData.aspx?userid=jalal');

    source.onopen = function(event){$('#targetDiv').append("Connection opened... <br/>");};
    source.onerror = function(event)
    {
        if (event.eventPhase == EventSource.CLOSED)
            $('#targetDiv').append("Connection Closed!<br/>");

        source.addEventListener("new-message", function (event) {});
    };
    source.onmessage = function(event){$('#targetDiv').append(event.data + '<br/>')};
});
</script>

<div id="targetDiv">

</div>

和GetData.aspx.cs页面背后的代码

protected void Page_Load(object sender, EventArgs e)
{
    DateTime StartDate = DateTime.Now;
    Response.ContentType = "text/event-stream";
    Response.Expires = -1;
    Response.CacheControl = "no-cache";

    Response.Write("data: " + Request.QueryString["userid"] + " " + DateTime.Now.ToString() + "\n\n ");
    Response.Flush();
}

任何人都可以告诉我上述代码中的错误,或者为什么这只发生在Firefox中。

2 个答案:

答案 0 :(得分:0)

我找到了php服务器端的解决方案,我们需要给服务器一些睡眠时间至少1秒。

Response.Flush();
sleep(1);

答案 1 :(得分:0)

为了正确使用EventSource,您的服务器端代码需要不断写入Response

protected void Page_Load(object sender, EventArgs e) {
    DateTime StartDate = DateTime.Now;
    Response.ContentType = "text/event-stream";
    do {
        Response.Write("data: " + Request.QueryString["userid"] + " " + DateTime.Now.ToString() + "\n\n ");
        Response.Flush();
        Thread.Sleep(1000);
    } while (true);
}