2008-10-29 90 views

回答

5

服务器将继续准备响应。当它试图发送响应给客户端时,它会失败。实际发生的这可能取决于实际的应用服务器实现,响应是否被缓冲等。

在Java EE应用服务器(Tomcat和WebLogic,可能还有其他应用服务器)中,您将得到以下例外:

java.net.SocketException: Connection reset by peer: socket write error 
0

我认为实际的TCP连接被浏览器关闭,因此Web服务器将无法发送数据,除非它被专门编程为在准备数据时检测到断开的连接,那么该页面将是即使用户取消,也可以完全处理。

虽然我对这些东西知之甚少,但这是我的猜想。

1

PHP了解三种连接状态:NORMAL,ABORTED和TIMEOUT。您可以使用ignore_user_abort()函数在ABORTED连接(默认情况下,脚本已终止)上更改PHP的策略。从笔记部分:

“PHP将不会检测到用户已中止连接,直到尝试向客户端发送信息。”

请注意,如果您的服务器的输出被缓冲,发送可能不会立即发生。

查看PHP's page on connection handling了解更多详情。

+0

是Apache或其他webrowser发送FIN/ACK到PHP? – 2012-10-30 12:55:53

1

如果连接在请求完全发送到服务器之前中断,则不会发生响应处理。

如果请求完全发送,则会触发服务器端处理,尽管连接断开,响应生成仍会继续。

在ASP.NET中,通过使用Response.IsClientConnected可以检测到此情况,以便在客户端不再连接时停止处理,从而节省CPU时间并立即将线程返回到线程池。

相关问题