2016-08-18 48 views
0

不排隊工作,而不是來自客戶端的ajax調用,只是在服務器端異步啓動另一個工作,Drupal(7.x)可以做這樣的事情嗎?Drupal有任何異步功能在服務器端使用?

+0

這就是排隊工作是... – ceejayoz

+0

什麼樣的事件會開始這項工作?它是否在服務器cron上啓動,或者用戶操作是否觸發它? – mgadrat

+0

在一個特定情況下,節點成功保存後。服務器可以做更多的東西,而不會干擾用戶看到的正常的Drupal行爲。 – Hao

回答

1

實現這一點,您需要一個或多個進程在後臺運行並執行異步任務。作爲一個(傳統的)PHP應用程序,Drupal不提供這樣的過程。根據您的服務器配置,運行Drupal來處理HTTP請求的PHP進程在這些請求之間停止或閒置。當他們開始時,他們使用乾淨的狀態。他們也需要在處理HTTP請求的時候死掉,並且AFAIK沒有選擇讓他們留下來完成一些事情。所以沒有可用於執行異步任務的進程。

使用Drupal Queue API,您可以輕鬆排入您的任務,並讓外部進程異步進行挑選和處理。您可能不希望僅在Drupal cron運行期間處理它們,這將成爲Drupal中隊列的默認行爲。相反,您可以使用像Gearman,Beanstalkd甚至Redis這樣的隊列管理器,並有一個單獨的進程監聽它,收集入隊的項目並儘快處理它們。

Beanstalkd integration module提供了一個守護進程腳本來處理在後臺排隊的項目,有效地提供了一個隨時可用的解決方案。