2016-12-28 36 views
3

我發現pthreads不適用於Web環境。我使用PHP7.1在FPMLinux Debian我也使用Symfony 3.2。所有我想做的事,例如:使用FPM在PHP7上異步/線程

  1. 用戶提出的要求和PUT文件(即1GB)
  2. PHP服務器接收文件並處理它。
  3. 立即返回true用戶(jsonResponse)沒有等待處理上傳的文件
  4. 後來,當處理文件完成(移動,複製,複製任何你想要的)只需要添加一個事件或背景不回調,並通知用戶。

現在。爲此,我創建了Console Command。我從後臺執行Process('bin/console my:command')->start();,並執行我的處理。但是這對我來說是用火箭筒殺死一隻蒼蠅。我必須將許多變量傳遞給此可執行命令。

所有我想創建另一個線程,只是返回給用戶而無需等待處理。

你可能會說這是重複。並指向pthreads但是 pthreads 聲明它僅用於CLI。 pthreads的最後一個版本也不適用於symfony。 (致命錯誤)。

我停留在這一點上有疑問,如果我要留在創建每個上傳的文件或移動python -> django

+3

你不想要線程。你想要一個工作隊列。看看Gearman或類似的東西。 – Gordon

+0

我真的很喜歡它。我期待着doc。我認爲這會更適合我的需求。我在我的問題中還提到了**隊列**,但我稍後再刪除。在看到Gearman和隊列機制後,我決定去找工作隊列。此外,請閱讀說明 - 例如,每次執行2個線程,並假設400客戶端進入服務器,它將運行800個線程。這不是我想要的。 Gearman是這裏的關鍵。我會深入研究它。謝謝。哦!你可以添加這個作爲答案:) – xangr

+1

也許你正在尋找異步處理:https://gist.github.com/LeonanCarvalho/62c6fe0b62db8a478f502f84c5734c83 – LeonanCarvalho

回答

3

你不想線程處理。你想要一個工作隊列。看看Gearman或類似的東西。

的Gearman提供了一個通用的應用程序框架的工作外包給那些更適合做這項工作的其他機器或過程。它允許您並行執行工作,負載平衡處理以及在語言之間調用函數。它可用於從高可用性網站到傳輸數據庫複製事件的各種應用程序。換句話說,它是分佈式處理交流的神經系統。

+1

另外,https://github.com/mmoreram/GearmanBundle誰使用像我一樣的Symfony。它每分鐘越來越好:) – xangr