如何在没有轮询的情况下在ASP.NET上发生断开连接时如何检测断开连接?

时间:2012-03-19 14:02:46

标签: c# javascript asp.net html server-sent-events

我在ASP.NET中有一个server-sent events处理程序

Response.ContentType = "text/event-stream";
while (true)
{
   if(thereIsAMessage)
   {
       Response.Write(message);
       Response.Flush();
       if (Response.IsClientConnected == false)
       {
           break;
       }
   }

   System.Threading.Thread.Sleep(1000);
}

问题是我只能在向客户端发送内容时检测到客户端断开连接。而且我不想轮询它,这首先打败了使用服务器发送事件的整个目的。

2 个答案:

答案 0 :(得分:2)

尝试查看SignalR - 对于长轮询很有用,服务器通知将不难实现。可用时使用websockets。使用集线器可以非常轻松地实现您的场景。

答案 1 :(得分:0)

如果您想在自己的代码中进行操作,只需修改您的示例:

Response.ContentType = "text/event-stream";
while (Response.IsClientConnected)
{
   if(thereIsAMessage)
   {
       Response.Write(message);
       Response.Flush();
   }

   System.Threading.Thread.Sleep(1000);
}

但是,我仍然不确定这是使用Thread.Sleep方法的最佳实现。