我使用ASP.NET编写的Comet应用程序。有一组活动连接上下文(HttpContext)。并且有一个线程应该定期迭代集合并检查它们的状态。因此,应用程序体系结构不是每个请求的线程。
检查连接是否处于活动状态(未由远程主机关闭)的最佳方法是什么?
我发现了这个:
context.Response.Write(' ');
context.Response.Flush();
if (!context.Response.IsClientConnected)
{
// ...
}
但这不是一个好的解决方案,因为它需要一个线程时间来处理(Flush()是阻塞操作)。我需要的解决方案对于许多并发连接非常快,并且不使用阻塞操作。
也许有一些IIS或ASP.NET功能允许以这种方式监控连接?
答案 0 :(得分:2)
简短的回答是......不。 ASP.NET知道为IsClientConnected返回false的唯一方法是用户对服务器进行不同的调用,或者先前已调用Response.Close。根据我的经验,用户很可能关闭连接并仍然使IsClientConnected返回true。只要考虑正在进行的基础HTTP通信,您就可以看到原因。
你想要完成什么?