0

我有一个 PHP 应用程序,我想在其中使用 Gearman 来完成耗时的任务。我进行了很多搜索,发现 Net_Gearman 是包含客户端和工作类的 PHP API。

为了使用 Net_Gearman,我接下来应该做什么?我对Linux和Perl一无所知。

4

1 回答 1

4

几件事让您顺利上路(我使用了来自https://github.com/lenn0x/net_gearman的一些笔记以及我自己对 Gearman 工作原理的了解)

客户:

创建一个客户端脚本,它将连接到您的 gearmand 进程并向其提交作业:

require_once 'Net/Gearman/Client.php';

$client = new Net_Gearman_Client('localhost:7003');
$client->someBackgroundJob(array(
    'userid' => 5555,
    'action' => 'new-comment'
));

图书馆:

创建一个库/另一​​个脚本来处理实际作业(在本例中为 someBackgroundJob):

<?php

class Net_Gearman_Job_someBackgroundJob extends Net_Gearman_Job_Common
{
    public function run($args)
    {
        if (!isset($args['userid']) || !isset($args['action'])) {
            throw new Net_Gearman_Job_Exception('Invalid/Missing arguments');
        }

        // Insert a record or something based on the $args

        return array(); // Results are returned to Gearman, except for 
                        // background jobs like this one.
    }
}

?>

工人:

最后,你需要一个工人来处理这个工作。如果你愿意,你可以让它每分钟运行一次,直到没有任何工作要处理,那时它应该挂在那里直到它得到另一个工作:

<?php

require_once 'Net/Gearman/Worker.php';

$worker = new Net_Gearman_Worker('localhost:7003');
$worker->addAbility('someBackgroundJob');
$worker->beginWork();

?>

故障排除

确保 gearmand 在您的服务器上运行。您可以在 Linux 终端上运行以下命令:

[root@dev7 ~]# ps aux | grep gearman nobody

1826  0.0  0.1 406792  2236 ?        Ssl  Aug18  10:00 gearmand -d -u nobody -L 0.0.0.0 -p 4730 -P /var/run/gearmand/gearmand.pid -l /var/log/gearman/log root 4320  0.0  0.0 103240   944 pts/2    R+   16:16   0:00 grep --color=auto gearman
  • 如果 Gearman 正在运行,那么您应该会看到像上面那样运行的进程。如果不是,您需要启动它... Ubuntu:service gearman-job-server startCentos/Redhat:service gearmand start
  • 看看队列中有哪些工作!运行以下命令:

    (echo status ; sleep 1) | nc 127.0.0.1 4730
    

这假设您的 gearmand 服务器在同一台机器上运行并且您已经netcat安装。

于 2013-08-26T16:23:48.063 回答