PHP 背景執行的需求與方法 – 2014/07/23更新

前端網頁請求後要是處理需要一段時間,而使用者有可能會等不下去而關網頁怎麼辦?

  1. 既然要等一段時間,或許直接請他晚點回來查看結果或是完成後主動通知(Email, SMS...等)
  2. 已經通知晚點回來看了,所以使用者非常可能會做的就是:關閉網頁,那服務可能就會停止

綜合以上兩點,所以需要調整一下 PHP執行時候的設定與開啟多執行續的功能

參考下列兩個方法

  1. PHP 利用 ignoreuserabort + pcntl_fork 實作背景執行 (來來哥範例)
  2. 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

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

參與討論

2 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *