之前說到PHP的異步執行,主要目的就是提升用戶體驗,減少用戶等待時間,后臺異步執行代碼,畢竟只是簡單的模擬異步,還是很容易出問題的,所以這里改變一下思路,采用隊列來實現,原理一樣,效果一樣,相對于模擬異步,這個更復雜一些,不如模擬異步來的簡單粗暴。
隊列,常用于解耦任務處理,例如發郵件、處理圖片、生成報告等耗時操作,避免程序長時間阻塞運行,相對于模擬異步、使用隊列,效率更高,更可靠。
這里還是使用原生的方式去實現隊列的效果,先說一下隊列實現的流程和邏輯:包括任務創建、存儲、處理、處理結果。在程序運行到需要處理圖片,發郵件等耗時的功能時候,創建隊列任務,隊列的任務包括任務類型以及用到的數據,存到數據庫中。這里其實也可以使用其他的存儲最好的應該是使用Redis,但是我這個系統比較陳舊沒有安裝過,就還是用數據庫。
另外執行一個守護進程,或者定時器任務用來定時運行,運行的內容自然就是處理數據庫中的任務,這里就可以記錄一下任務的執行狀態,如果失敗的話也可以監控到,這里就是比異步執行好的地方,可以監控運行狀態,記錄處理結果,控制執行的邏輯。
1、添加任務

2、處理任務

上一篇: 移動協同簽名實現流程——輪詢掃碼結果



