我想讓PHP告訴Apache關閉連接並分別釋放工作線程。原因是我有一個腳本與客戶端請求一起調用,需要一些時間來處理,但不向客戶端返回任何內容,因此保持佔用線程是沒有意義的。目前我正在使用的代碼:如何從PHP關閉Apache線程?
ignore_user_abort(true);
header('Content-Length: 0');
flush();
ob_end_flush();
header('Connection: Close');
由於我從原來的用戶請求發送額外的異步請求到該腳本,Content-Length: 0
不會弄亂客戶端請求的響應。
無論如何,當我去監視服務器在做什麼時,我發現有一個工作線程佔用了長時間運行的請求,這正是我想要不發生的事情。我希望腳本在後臺運行而不佔用Apache線程。我怎樣才能做到這一點?
這實際上並不是多線程。您可以使用'pthreads'進行多線程(並不平凡,因爲它通常需要重新編譯PHP),而且我聽說即使在Apache進程中也可以完成。或者使用隊列系統,如Gearman或Resque。 – halfer 2014-10-02 09:59:55
如果你在共享主機,但它可能值得嘗試['pfork'](http://uk3.php.net/manual/en/function.pcntl-fork.php) - 這裏沒有太多的選擇除了'cron'。 – halfer 2014-10-02 10:07:11