ASP.net是如何实现的;HttpResponse.IsClientConnected“;工作

ASP.net是如何实现的;HttpResponse.IsClientConnected“;工作,asp.net,http,Asp.net,Http,如果HTTP是无连接的,ASP.net响应属性HttpResponse.IsClientConnected如何检测客户端是否连接?HTTP不是无连接的-您仍然需要连接才能从服务器接收数据;更准确地说,HTTP是无状态的。运行在HTTP之上的应用程序实际上很可能是有状态的,但HTTP本身不是 “无连接”也可以指使用UDP而不是TCP作为传输的系统。HTTP主要在TCP上运行,几乎所有真正的Web服务器都期望并返回TCP消息,而不是UDP消息。您可能会在基于UDP的协议(如UPnP)中看到类似HTT

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

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超时时,断开连接或连接重置消息它设置一个标志并允许继续执行,而不是终止响应生成器线程
以下是相关的源代码:

  • HttpResponse.IsClientConnected
  • IIS7WorkerRequest.IsClientConnected
  • ISAPIWorkerRequest.isClient已连接

一切都从HTTP请求开始。例如,您可以在其中生成工作线程,这些线程可以比请求本身更长寿。这里是IsClientConnected的用武之地,这样工作线程就知道客户机已经收到响应并且是否已断开连接