0

我想检查一下这个概念以及每个人对它的看法。我想使用 Gearman 在后台运行几个任务(主要是数据收集和处理)。

我想围绕 PHP 框架设置 Gearman(在我的例子中,它是 CakePHP2)。据我了解Gearman,工人只是一个运行单个php 脚本(即worker.php)的PHP 守护进程。

我试图弄清楚如何将我已经在 PHP 框架中构建的逻辑/代码引入到单个工作脚本中。否则我发现我可能不得不重建很多东西,比如模型。

所以我的解决方案是让 worker.php 保持轻量级,而让 worker 脚本简单地通过 CURL 启动 REST API 调用。这听起来像是一个不错的选择吗?

4

2 回答 2

1

对我来说,进行 cURL 调用听起来有点开销。我首先会探索以下内容:

  • 在工作人员中加载框架的一部分(比拨打电话然后调用框架便宜)
  • 做一个“回电”的特殊工人。例如,真正的工作人员会做真正的工作,并在完成时将结果提交到“回调”队列。然后,该回调工作人员将接受来自 Gearman 的作业并从那里获取它们(就像 REST API 端点将从那里获取它一样)。

无论如何,除非您在机器之间拆分工作,否则进行额外的 HTTP 调用并不是一个好主意。如果您可以直接使用 PHP,为什么还要涉及 Apache?

于 2012-10-03T18:03:46.850 回答
0

I am adding this as an addition to the answer but reply was too short.

I have been able to do the Gearman workers as a CakePHP console and wrap it around a supervisord config

// Add the example configs below
[program:my-gearman-test]
command= /path/to/cakephp/app/Console/cake gearman test
process_name= %(process_num)g-gearman-test
numprocs=1 
directory=/path/to/cakephp/app
autostart=true
autorestart=true
user=www-data
stdout_logfile=/path/to/logs/worker_stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/path/to/logs/worker_stderr.log
stderr_logfile_maxbytes=1MB

Then I run supervisord, and it will start initializing the Cake console command. Now with the worker part of the CakePHP framework, I get all the goodness that comes from using a framework instead of doing a standalone worker.php script

于 2012-10-05T01:09:36.800 回答