2017-07-26 145 views
1

我目前面臨以下問題:如何通知網站前端的後端處理工作狀態?

用戶上傳了他的圖像後,所有圖像都通過優化每個圖像(壓縮並刪除EXIF數據)的腳本處理。

我得到了一切工作,唯一的問題是,該過程需要相當一段時間。我想通知用戶工作狀態,例如處理圖像的百分比。

目前,用戶不得不等待後端的情況。什麼是完成這個最好的方法?我曾經想過AJAX調用,但我真的不知道從哪裏開始實現,也因爲它看起來像我需要多個調用(有點像處理工作中的心跳調用)。

我正在開發的應用程序是Laravel應用程序,我製作了一個通過AJAX調用處理傳入文件的API控制器。

任何幫助表示讚賞,謝謝。

+0

您可以使用'EventSource'爲客戶端提供事件流,請參閱[如何在服務器上實時讀取並回顯正在寫入的上載文件的文件大小,而不會在服務器和客戶端都阻止?](https:/ /stackoverflow.com/q/42475492/) – guest271314

回答

2

Laravel已爲此Broadcasting。它使用websocket,redis或pusher將事件發送給客戶端。

通過這種方式,您可以在處理完成時向客戶端發送一條消息,而無需始終刷新網頁。

1

你會更好,閱讀它是如何完成的,例如原理:Progress bar AJAX and PHP它做

本質的方式是工作(在你的案件處理圖像)發生過PHP的服務器上。你的腳本需要產生某種輸出來顯示它有多遠,例如, echo百分比進度的一些值。 PHP腳本本身負責生成此輸出,因此您必須計算出如何計算並編碼。可能需要處理的圖像數量以及每個圖像成功處理時,它將1加到計數器上。當計數器等於圖像數量時,100%完成,或者如果出現錯誤,可能會出現一些錯誤消息。

在前端,你可以有一個讀取PHP腳本輸出的ajax腳本。這反過來可以更新進度條,或者帶有某種百分比消息的div - 使用來自PHP腳本的值。

Laravel和其他框架都有內置的幫助方法。但是你會更好地理解它的工作原理,比如我發佈的鏈接。

+0

這不是重點,這是一個上傳圖像的進度條。但圖像已上傳。 – Jerodev

+1

那又如何?同樣的原則適用。工作是什麼並不重要。您需要在服務器上運行一些密集型任務,並且希望在客戶端顯示進度。理解它的工作原理比僅僅使用內置在框架中的東西而不理解正確的東西更好。 – Andy

+0

這不是我的觀點。你是對的,你應該知道如何在引擎蓋下工作以獲得更好的理解。我的觀點是,這不是OP的問題的答案。 ;) – Jerodev