Как обнаружить отключение при использовании отправленных сервером событий в ASP.NET? - PullRequest
1 голос
/ 16 марта 2012

У меня есть следующий обработчик SSE в ASP.NET

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();
}

Но мне не удалось.

1 Ответ

4 голосов
/ 18 марта 2012

Вы можете использовать свойство 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.

...