2009-08-26 108 views
1

如果發出http請求並且調用者放棄請求,它是否會完成?例如,一個異步JavaScript GET請求在數據庫中記錄橫幅點擊然後重定向。腳本是否需要等待響應?HTTP請求是否總是完成?

回答

1

你應該等待它是安全的。你永遠不知道服務器什麼時候會處理你的請求(儘管它通常在幾百毫秒或更少的時間內),所以你不知道是否超時,失敗,或者如果你打算收到除非您等待,否則不同的預期反應

2

客戶端不會向服務器發送任何通知來取消請求。

PHP不知道客戶端是否斷開連接,直到它嘗試向客戶端發送一些數據(例如,無緩衝的echo()調用),所以如果腳本沒有向用戶返回任何數據,它將完全執行。如果確實返回數據,則可能會中途中止,但可以使用ignore_user_abort()更改) 如果您使用的是其他環境,則必須查閱文檔。

2

對於大多數情況下,一旦請求被服務器接收到,如果客戶端停止監聽,它將不會停止處理。

但是,服務器在服務請求時可能總是失敗,所以假設它完成可能不是一個好主意。

3

您的要求有多重要?如果數據庫當時不可用,該怎麼辦?如果服務器端代碼引發異常怎麼辦?

對於非常關鍵的請求,您可能需要實現某種能夠保存請求數據的消息隊列,直到它可以被完全處理。如果您正在處理網格和雲,這會變得更加複雜(您不能將消息排列在單個節點上,因爲節點可能會發生硬件故障)。但是,這是一個極端的情況,你最終會得到專用的隊列服務器。

1

您不必等待響應以便請求到達服務器。服務器可以在處理請求時檢查是否有人正在監聽,但即使沒有人正在監聽響應,處理請求也會開始(當然,除非出現錯誤)。

如果要確保請求確實已處理完畢,則應等待響應,但不要求請求通過服務器。

相關問題