一、不能同时充当Worker和Client?!
测试中发现,蓝色过程正常,绿色过程万分不稳定。
不知是用法问题,还是什么。
Worker&Client部分代码:
$worker= new GearmanWorker();
$worker->addServer("192.168.1.93", 4730);
$worker->addFunction("get_id", "fun_get_id");
$client= new GearmanClient();
$client->addServer("192.168.1.93", 4730);
while ($worker->work());
function fun_get_id($job)
{
$str = $job->workload();
$t = getTime();
return $str . $t;
}
function getTime(){
global $client;
$data = $client->do("get_time", "");
return $data;
}
二、PHP做Worker无须一直运行?!
Worker由于一般有个死循环在里面,所以一般需要做成守护来跑。
用PHP页面测试时,如果用php做worker,只需运行一次,即只要把处理函数注册到job中,以后就不用运行该php页面了,直接运行client页面就能得到结果。很是神奇啊~
求达人解惑~~~~~~~
-----------------------------------2012年4月17日 更新-------------------------------------------
对于第一个问题,貌似是属于用法问题。
如果同时充当Client和Worker,那么需要使用两组jobs。
-----------------------------------2012年8月22日 更新-------------------------------------------
这两个问题应该都是fastcgi方式的原因,如果PHP以fastcgi方式运行,php进程是事先启动好的。
所以还是以终端方式运行worker吧。