0

机器 1 -使用 PHP api 的客户端

$client = new \GearmanClient();
$client->addServer(..);
$client->doBackground('demotask', 'hello world');

机器 2 - 工人-使用 PHP api,直接在 bash 中:
gearman -w -f demotask -- php -f taskexecutor.php

taskexecutor 正在运行,$argv不包含hello world预期的 .

PS 对 PHP 的 API 和第二台机器上的永远 while 循环不感兴趣。我希望 gearman 在需要时启动我的脚本

4

1 回答 1

1

我真的不推荐这个实现。如果您的 php 脚本出现任何问题,您将无法重新提交作业,或与 gearman 沟通。

Anwyays,问题是当gearman 客户端抓取作业时,作业工作负载被传递给您的 php 进程的 STDIN。所以这意味着 $argv总是为空的。您传入的参数可以像这样从 STDIN 读取;

$params = fgets(STDIN);

我建议您将参数作为 JSON 字符串传递,这样您就可以使用简单的函数,例如json_encodeand json_decode,而不必过多担心结构或编码等。

于 2013-01-19T20:19:19.600 回答