本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
前端網頁請求後要是處理需要一段時間,而使用者有可能會等不下去而關網頁怎麼辦?
- 既然要等一段時間,或許直接請他晚點回來查看結果或是完成後主動通知(Email, SMS...等)
- 已經通知晚點回來看了,所以使用者非常可能會做的就是:關閉網頁,那服務可能就會停止
綜合以上兩點,所以需要調整一下 PHP執行時候的設定與開啟多執行續的功能
參考下列兩個方法
方法一使用PHP提供的方法搭配設定上解決,先是設定執行不限時間(如果能抓到一定執行時間是最好),再來就是透過fork產生子行程去執行任務
方法二是使用Linux的指令 nohup 執行script不要讓他因為請求中斷而停止
兩個都有個缺點就是效能管理
子行程要是沒做效能最佳化,可能就會一股腦衝破伺服器的記憶體資源變成殭屍
2014/07/23 補
找到一篇有對本文主題介紹的文章,也貼來分享一下
Parallel processing or multitasking in PHP
介紹到 Thread 與 Process 的部分,本文中介紹的方法被歸類在 process 中,有興趣對 thread 的可以點進去看看呦!
關於 PHP 子行程的說明,有一份文件介紹的還滿生動,值得參考XD
利用PHP寫Multi Process程式 1 - 產生子程序
2014/07/21更新
上述情形討論應用在 Nginx + PHP-FPM 的架構中
毫無效果阿(抱頭)
想說怎麼效果都沒出來,行程還是會被卡著
找了一下問題,發現其實是因為伺服器架構的問題,網路上大多討論的是 Apache 架構,在 Nginx 下有他的管理機制所以預設是無作用的,怎麼開我就還沒試,有機會再補。
而且在 Nginx 架構下甚至連要主動切斷與 client 連線的方法也不同
主動斷開 client 連線的方法參考:神奇的 Fastcgi-Finish-Request
發佈留言