2008-10-29 23 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時間並立即將線程返回到線程池。

相關問題