计算机1 - 客户端
$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
。
P.S。对PHP的API和第二台机器上永远的while循环不感兴趣。我希望gearman在需要时启动我的脚本
答案 0 :(得分:1)
我真的不推荐这个实现。如果您的PHP脚本出现任何问题,您将无法重新提交作业或与齿轮工人沟通。
<\ n> Anwyays,问题是当gearman client抓取作业时,作业工作量会传递给php进程的STDIN。这意味着$ argv 始终将为空。您传入的参数可以像STDIN一样读取;$ params = fgets(STDIN);
我建议您将params作为JSON字符串传递,这样您就可以使用json_encode
和json_decode
之类的简单函数,而不必过多担心结构或编码等。