1

我在用 ASP.NET 编写的Comet应用程序上工作。有一组活动连接上下文(HttpContext)。并且有一个线程应该定期遍历集合并检查它们的状态。所以应用程序架构不是每个请求的线程。

检查连接是否处于活动状态(未被远程主机关闭)的最佳方法是什么?

我找到了这个:

context.Response.Write(' ');
context.Response.Flush();

if (!context.Response.IsClientConnected)
{
    // ...
}

但这不是一个好的解决方案,因为它需要一个线程时间来处理(Flush() 是阻塞操作)。我需要对许多并发连接运行非常快并且不使用阻塞操作的解决方案。

也许有一些 IIS 或 ASP.NET 功能允许以这种方式监视连接?

4

1 回答 1

2

最简洁的答案是不。ASP.NET 知道为 IsClientConnected 返回 false 的唯一方法是用户是否对服务器进行了不同的调用,或者之前调用了 Response.Close。根据我的经验,用户很可能关闭连接并仍然让 IsClientConnected 返回 true。只要想一想正在进行的底层 HTTP 通信,您就会明白为什么。

你想达到什么目的?

于 2009-04-18T11:18:45.220 回答