ASP.net" HttpResponse.IsClientConnected"工作?

时间:2015-10-31 09:07:22

标签: asp.net http

如果HTTP是无连接的,那么ASP.net响应属性,HttpResponse.IsClientConnected检测客户端是如何连接的呢?

2 个答案:

答案 0 :(得分:5)

HTTP不是"无连接" - 您仍然需要连接才能从服务器接收数据;更准确地说,HTTP是无状态。在HTTP上运行的应用程序很可能实际上是有状态的,但HTTP本身不是。

"无连接"也可以指使用UDP作为传输而不是TCP的系统。 HTTP主要通过TCP运行,几乎每个真实的Web服务器都期望并返回TCP消息而不是UDP。您可能会在基于UDP的协议(如UPnP)中看到类似HTTP的流量,但由于您希望可靠地传送您的网页,因此将始终使用TCP而不是UDP。

对于IsClientConnected,当您访问该属性时,它会调用当前HttpWorkerRequest,这是当前主机环境实现的抽象类。

  • IIS7 +实现它,如果以前收到TCP断开连接消息(设置字段),该方法现在将返回false
  • ISAPI实现(IIS 6)调用IIS中的一个函数,如果当前请求/响应上下文中的TCP客户端仍然连接,则通知调用者,尽管它可能在相同的基础上工作:当Web服务器收到TCP超时,断开连接或连接重置消息,它设置一个标志,让执行继续,而不是终止响应生成器线程。

以下是相关的源代码:

答案 1 :(得分:2)

这一切都始于HTTP请求。例如,在其中,您可以生成工作线程,这可以比请求本身更长。这里是IsClientConnected派上用场的地方,因此工作线程知道客户端已经收到响应并且已经断开连接。