2012-11-27 150 views
1

當客戶端提前斷開服務器請求時,服務器是否仍然執行其餘的工作?
具體而言,在Java Servlet中的doGet,如果我有以下代碼:
客戶端斷開連接後,進程是否仍然繼續

 

public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException 
{ 
    A(); //client disconnects after A(); 
    B(); 
    C(); 
} 

if client disconnects after A() is finished, would B and C still get executed? 

回答

0

這取決於。

如果在A()(或任何其他方法)期間嘗試將回復(使用res)發送回客戶端,則會拋出IOException。如果沒有捕獲,它會終止servlet的執行。

否則計算將在C()之後進行並退出。

+1

實際上在所有情況下都可能不是這樣。響應可能會被緩衝,因此只有當緩衝區被刷新時,您纔會得到異常。另一種可能性是兩者之間的代理服務器,它可能會等到從服務器發送整個響應,然後嘗試將其發送到客戶端。 – ShyJ

+0

好點,全部有效! – mindas

3

是的,它會的。直到它嘗試寫入輸出流(作爲響應)時,服務器才知道斷開連接。事件由於代理服務器之間或由於輸出流緩衝,可能很難知道客戶端斷開連接。

相關問題