處理在服務器上接收重複HTTP請求的方法是什麼?處理長時間運行的重複HTTP請求
我有一個LAMP網絡應用程序的報告,需要大約30秒來建立服務器並返回到客戶端。客戶不耐煩並在第一次完成之前再次運行報告。這沉沒了服務器。有什麼辦法來處理/防止這個服務器端?
處理在服務器上接收重複HTTP請求的方法是什麼?處理長時間運行的重複HTTP請求
我有一個LAMP網絡應用程序的報告,需要大約30秒來建立服務器並返回到客戶端。客戶不耐煩並在第一次完成之前再次運行報告。這沉沒了服務器。有什麼辦法來處理/防止這個服務器端?
存儲作業已在某處運行的事實。
在生成報告的代碼中,檢查一個是否已經在運行。如果是這樣,不要運行另一個。
當報告完成生成或某些超時過期以處理異常情況時,請取消存儲該事實。
你可以使用一個數據庫,分佈式緩存服務器,Redis的,文本文件,寫入共享內存...
現在,告訴用戶正在處理的東西往往是用AJAX完成的。
通常情況下,您會將請求發送到您的服務器,然後服務器會返回一個202響應和一個地址(可能帶有UUID),以便瀏覽器找到結果(您不一定直接顯示結果,但保留在腳本的後臺:您也可以直接爲不支持JavaScript的客戶端顯示此內容)。
然後,您將在後臺對該地址進行後續請求,並在準備就緒時顯示結果。
這種方法不僅具有更方便用戶的優勢,而且對斷開連接也更加強大。
30秒只是太長,讓用戶等待今天的網絡應用程序世界。谷歌搜索整個網絡的1/100時間。是什麼讓你的網絡應用程序更先進或消耗數據。如果您的一個實例即使在優化後仍無法處理它,您最好將其擴展到雲(或更多服務器)。如果真的如此苛刻,請將其分成可以在多個實例中並行運行的子任務。
對於你的直接問題,而不是你沒有問的問題的答案;上面的答案有一些技巧。您可以在它們發生之前生成頻繁請求的查詢 - 也可以僅向渲染髮出第一個請求,並在發送結果之前等待該請求完成。
您可以預先生成報告過夜,然後只是鏈接到?如果客戶獲得他們自己定製的報告,這將不起作用,但如果每次都是相同的,它應該很好地工作。 – andrewsi