來源:互聯網
上載者:User
關鍵字
php
javascript
shell
node.js
html5
目前使用php執行指令碼,但是在前台頁面如果關閉的話,會終止指令碼執行,所以希望切換到後台運行
還有一種可以在前台運行,但是提供運行進度,比如目前即時更新執行狀態,比如已經執行到80%,然後到100%完成後提示完成資訊。
舉個列子,比如實現視頻轉碼,目前正在轉碼,然後希望在後台轉碼,不影響前台操作。
另外一種佔用前台操作,但是可以告訴前台目前還在轉碼,還有多少沒轉碼。
回複內容:
目前使用php執行指令碼,但是在前台頁面如果關閉的話,會終止指令碼執行,所以希望切換到後台運行
還有一種可以在前台運行,但是提供運行進度,比如目前即時更新執行狀態,比如已經執行到80%,然後到100%完成後提示完成資訊。
舉個列子,比如實現視頻轉碼,目前正在轉碼,然後希望在後台轉碼,不影響前台操作。
另外一種佔用前台操作,但是可以告訴前台目前還在轉碼,還有多少沒轉碼。
視頻轉碼,耗時較長,不應該阻塞PHP-FPM進程,所以應該另開一個進程非同步處理:
pclose(popen('php /path/to/task.php &', 'r'));
指令碼task.php裡調用Linux命令mencoder/ffmpeg/imagemagick(convert)
處理多媒體檔案,
並在資料庫任務表裡插入一條資料,用來記錄任務的狀態進度,供前端AJAX檢查.
1、轉碼服務是一個進程,提供2個介面功能(a:接受轉碼請求並處理,b:查詢轉碼進度)
2、前端調用這2個介面即可。
針對這兩種。後台進行執行的,我所瞭解到的就是建立一張資料表,比如視頻轉碼,發送郵件等,要執行對應的操作的時候向資料庫插入資料,然後編寫一個定時任務去後台完成相關操作
在前台執行並顯示進度條,將每一次的操作當成一步,算出共多少步,涉及到的就比較多了
後台非同步可以用Swoole擴充。
至於進度可以用資料庫或者redis之類的進行通訊,比如進度每過5%,更新一下資料庫/redis, 前台則是每10秒查詢一次最新狀態,這樣的。