2012-12-19 94 views
1

在上傳的大文件的第一個塊上,我們將文件詳細信息輸入到數據庫中。如果用戶導航離開頁面。 ajax請求被髮送並且該行被刪除。但是,如果他們的連接/電源關閉,則不會發送請求,並且我們的數據庫中會出現孤兒條目。在上載期間檢測客戶端超時(服務器側)

現在我們檢查最後一個文件部分的時間戳,並且在10分鐘內沒有上傳塊(1MB)的任何內容都會被刪除。我們希望能夠加快這一過程,但如果我們縮短了這一時間,那麼具有較慢互聯網連接的用戶在等待上傳時可能會遇到他們的文件/記錄被刪除。

到目前爲止,我們已經想到了2個解決方案,第一個就是我們現在使用的解決方案,如上所述。第二種方法是每隔X秒發送一次「保持活躍」請求,如果服務器在沒有收到更新的情況下進入Y秒,那麼記錄將被丟棄。

後者似乎工作更快,但似乎非常低效。有沒有人做過這樣的事情?什麼是最好的方式去做呢?

在Ubuntu上運行Apache,我也使用jQuery。

+1

是的,垃圾回收工作看起來是正確的,我甚至可以用這種方式來做到這一點(例如,抓取AJAX請求)。只需延長超時時間,例如> 24小時。 – deceze

+0

我應該補充的是,如果上傳者要回到上傳頁面(它列出了他們的內容,它仍然可見並「上傳」 - 我們有一個按鈕,用戶可以取消它,但它不是理想的 –

回答

2

當用戶終止連接時(不管是通過瀏覽器還是關閉瀏覽器),apache服務器都會終止PHP進程(如果PHP中沒有ignore_user_abort())。在shutdown function中,您可以檢查connection status,如果它是abortedtimeout,請刪除該文件。

+0

哇,以前從未聽說過這個函數,但看起來很有希望,謝謝!|編輯:如果每個塊都是單獨的ajax調用(這是一個使用javascript的html5上傳器),這將如何工作? –

相關問題