Drupal可以在服务器端使用任何异步功能


Drupal has any asynchronous function to use on server side?

不排队作业,也不是来自客户端的ajax调用,只是在服务器端异步启动另一个作业,Drupal(7.x)有办法做到这一点吗?

要实现这一点,您需要一个或几个进程在后台运行并执行您的异步任务。作为一个(传统的)PHP应用程序,Drupal不提供这样的过程。根据您的服务器配置,运行Drupal来处理HTTP请求的PHP进程会在这些请求之间停止或闲置。当它们开始时,它们使用干净状态。它们还需要在处理HTTP请求结束时死亡,而且,据我所言,它们没有选择稍微逗留一下以完成任务。因此,没有可用的进程来执行异步任务。

使用Drupal Queue API,您可以轻松地为任务排队,并有一个外部进程选择和异步处理它们。您可能不希望仅在Drupal cron运行期间处理它们,这将是Drupal中队列的默认行为。相反,你可以使用像Gearman, beanstald甚至Redis这样的队列管理器,并让一个单独的进程侦听它,收集排队的项目并尽快处理它们。

beanstald集成模块提供了一个守护脚本来处理在后台排队的项目,有效地提供了一个随时可用的解决方案。