机器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
注:对PHP的API和第二台机器上的永久while循环不感兴趣。我想gearman启动我的脚本时,它需要
我真的不推荐这种实现。如果你的php脚本出了什么问题,你将无法重新提交作业,或者与gearman通信。
无论如何,问题是当gearman客户端抓取作业时,作业工作负载被传递给php进程的STDIN。这意味着$argv是总是为空。您传入的参数可以像这样从STDIN中读取;
$params = fgets(STDIN);
我建议将你的参数作为JSON字符串传递,这样你就可以使用简单的函数,如json_encode
和json_decode
,而不必担心太多的结构或编码等