2012-03-19 55 views
0

我有一个server-sent events处理在ASP.NET如何在没有轮询的ASP.NET上发生断开连接?

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

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

的问题是,我只能检测客户端断开连接时,我送点东西给客户端。我不想调查它,这首先打败了使用服务器发送事件的整个目的。

+0

您可以在Sleep(...)函数之后执行isClientConnected()检查。你是什​​么意思“不想集中它”? – ZippyV 2012-03-20 14:19:28

+0

@ZippyV它没有关系,在哪里检查Response.IsClientConnected。我试图把它放在睡眠方法调用后无济于事。 – 2012-03-20 19:43:14

+0

@ZippyV我不想让发送空邮件的客户端只是为了检查它是否还活着。 – 2012-03-20 19:43:44

回答

2

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

+0

无法安装包'Microsoft.WebSockets 0.2.1'。您正在尝试将此软件包安装到以'.NETFramework,Version = v4.0'为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用。有关更多信息,请联系软件包作者。 – 2012-03-19 16:15:31

+0

你使用Nuget安装它吗? – 2012-03-19 17:42:56

+0

是的,我是。 Nuget给了我这个信息。我试图改变目标框架版本,但无济于事。 – 2012-03-20 19:41:38

0

如果你想在自己的代码做的,你可以简单地修改你的例子:

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

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

但尽管如此,我不知道这是一个使用了Thread.Sleep方法最优实现。