1

这是我用于服务器发送事件的 ASP.NET。

Response.ContentType = "text/event-stream";
Response.CacheControl = "no-cache";
//repeat loop
while (true) {
int LastEventId = Request.Headers.Get("Last-Event-ID") != null ?       
Int32.Parse(Request.Headers.Get("Last-Event-ID")) : -1;
int MessageCount =    UserManager.GetMessageCount(UserManager.GetUserDetails(Page.User.Identity.Name).UserId);
if (LastEventId != MessageCount)
{
    Response.Write(string.Format("retry: 5000\nid: {0}\ndata: {0}\n\n", MessageCount));
    Response.Flush();
}
else
{
    Response.Write(string.Format("retry: 5000\nid: {0}\ndata: \n\n", MessageCount));
    Response.Flush();
}
    if (Response.IsClientConnected == false)
{
    break;
}
    Response.Close();
    System.Threading.Thread.Sleep(5000);
}

Firefox 浏览器在两次后没有重新连接。相同的代码在 Google Chrome 上运行。任何人都可以帮我解决这个问题吗?

4

1 回答 1

0

尝试删除冒号后的空格。似乎 Firefox 解析器对空格和换行非常敏感。尝试像这样更改您的代码:

Response.Write(string.Format("retry:5000\nid:{0}\ndata:{0}\n\n", MessageCount));

在某些浏览器中定义字符集也可能会有所帮助:

Response.ContentType = "text/event-stream;charset=UTF-8";

希望这可以帮助。

于 2015-11-10T13:50:22.673 回答