4

我在 ASP.NET 中有以下 SSE 处理程序

Response.ContentType = "text/event-stream";
while (true)
{
    Response.Write(string.Format("data: {0}\n\n", DateTime.Now.ToString()));
    Response.Flush();
    System.Threading.Thread.Sleep(1000);
}

即使我关闭了客户端应用程序,它也会无限期地运行。如何通知服务器停止处理程序?

我在客户端上试过:

var source = new EventSource('Handler.aspx');
window.onunload = function() {
     source.close();
}

但我没有成功。

4

1 回答 1

4

您可以使用该类的IsClientConnected属性HttpResponse来检测客户端断开连接。

这是一个小例子:

Response.ContentType = "text/event-stream";
while (true)
{
  Response.Write(string.Format("data: {0}\n\n", DateTime.Now.ToString()));
  Response.Flush();

  if (Response.IsClientConnected == false)
  {
    break;
  }
  System.Threading.Thread.Sleep(1000);
}

因此,使用IsClientConnected您应该能够检测到的属性:

  1. 在客户端使用source.close().
  2. 通过关闭浏览器窗口或导航到另一个网站来关闭连接。

我已经使用 ASP.Net 4.0 和 Google Chrome 测试了我的代码。

于 2012-03-18T12:20:35.780 回答