假設一個操作可能需要2到10分鐘才能在服務器上執行,例如更新耗時的索引。如果您在服務器執行耗時操作時持有HTTP請求?或讓請求去?
您會在執行請求時執行操作嗎?即在操作完成之前不發送HTTP響應?如果客戶端/瀏覽器放棄請求,只需繼續操作?
什麼是替代方案?啓動手術,並以「長時間手術啓動」作爲迴應?如果該操作在中途未能成功,客戶會如何知道?保持操作的服務器端「狀態」?
感謝
假設一個操作可能需要2到10分鐘才能在服務器上執行,例如更新耗時的索引。如果您在服務器執行耗時操作時持有HTTP請求?或讓請求去?
您會在執行請求時執行操作嗎?即在操作完成之前不發送HTTP響應?如果客戶端/瀏覽器放棄請求,只需繼續操作?
什麼是替代方案?啓動手術,並以「長時間手術啓動」作爲迴應?如果該操作在中途未能成功,客戶會如何知道?保持操作的服務器端「狀態」?
感謝
您也可能使用分塊響應。首先,用一些可以顯示「請稍候」屏幕的代碼推入塊,刷新響應並開始工作。然後,您可以通過定期進度更新來推送和沖洗塊,或者只需在最後輸入一個「已完成」信息。很明顯,你可以使用JavaScript來獲得一個不錯的用戶界面。
(如果你使用WSGI作爲第一WSGI規範寫在使用未知長度的反應塊,以便用分塊的響應存在是不可能的辦法以上不適用。)
如果有需求,你知道需要很長時間(超過幾秒)來處理,您必須至少假設該連接可能被防火牆強行切斷。
我會說你應該在後端實現一個隊列系統。請求執行操作成爲請求隊列的操作。當操作實際完成後,您可以等待客戶端進行輪詢,或主動以某種方式通知他們。對於瀏覽器,您幾乎不得不輪詢或發送電子郵件。
我希望我能接受幾個答案。 – rapadura
。內容豐富,謝謝。 – rapadura