2017-04-05 42 views
0

當用戶點擊一個按鈕時,我需要執行一個耗時的任務。基本上,我會在每個帖子上做一些處理,向很多人發送請求到遠程服務器。如何在後臺處理請求並稍後報告結果?

用戶不會立即需要結果,所以我可以在後臺運行它。但是我需要能夠告訴用戶當他們再次訪問該頁面時,任務是否完成(以及結果如果完成)。另外,我不希望他們能夠在第一個仍在運行時啓動另一個相同任務的實例(通過單擊按鈕)。

任何方式我可以做到以上所有?

編輯:我正在開發的WordPress。它被貼上標籤,但我想我應該在問題中提到它。

+0

你可以每5秒使用javascript輪詢您的網站,並檢查該作業是否完成。 – bumperbox

+0

你將需要實現某種類型的隊列系統 – Trent

+0

@bumperbox這不是問題。我希望他們能夠離開該頁面。當他們回到那個頁面時,它說任務還沒有完成,完成等等。代碼的服務器端是我的問題。 – lfk

回答

0

您需要JavaScript才能創建Ajax請求。你需要學習至少JavaScript的基礎知識,然後你可以嘗試一個庫(例如jQuery),或者你可以創建一個庫(如果可以的話)。

+0

這就是我現在正在做的(jQuery)。任務耗時過長,請求超時。我知道我可以增加超時時間,但是我沒有必要讓用戶留在同一頁面上。 – lfk

0

這是基本的過程中,我會去通過

  1. 創建一個會話(存儲在cookie中,長效)
  2. 將請求發送到服務器(通過AJAX或表單提交)
  3. 服務器在數據庫中創建工作記錄,例如 jobs table = session_id | job_id |狀態
  4. 頁面將重新加載並檢查屬於session_id的所有作業的數據庫並顯示它們。
  5. 用戶離開並稍後回來
  6. 頁面加載並檢查屬於session_id的所有作業的數據庫並顯示它們。

其他想法

  • 作業完成時,你可以向用戶發送電子郵件。
  • 長時間運行的作業可以通過守護進程或cron作業啓動。
  • 從命令行運行PHP腳本,沒有超時問題,如Web服務器請求
  • 你可以存儲在數據庫表作業進度,如果你想進入詳細程度