2014-12-03 68 views
2

林的任何状态在手动客户没有收到来自工人

预期客户端的输出为:

Starting 
Sending job 
Status: 1/6 complete 
Data: H 
Status: 2/6 complete 
Data: e 
Status: 3/6 complete 
Data: l 
Status: 4/6 complete 
Data: l 
Status: 5/6 complete 
Data: o 
Status: 6/6 complete 
Data: ! 
Success: !olleH 

相反,这是我的了:

Sending job 
Success: Hello!!olleH 

据我所知,工人和预期一样,它确实数据发送回客户端,这就是为什么我得到Sucess: Hello!!olleH,而不是仅仅!olleH,什么我不知道就是轮询状态不起作用

一些调试后,我想出了do..while块只运行一次
$gmclient->returnCode()0
看起来像我的客户没有收到来自任何状态工人

一些信息:
操作系统:Ubuntu的14.04(流浪汉)
gearmand版本:1.1.12
扩展版本:1.1.2
libgearman版本:1.1.12

进出口新的我想要达到的是与手册中的客户端输出相同,任何帮助都不胜感激

回答

1

我的猜测是文档不是过时就是平面错误。我做了一些挖掘,并且在0.21中对Gearman :: do()函数进行了更改,使其运行直至完成或出错。请参阅http://gearman.info/libgearman/gearman_client_do.html

更改版本0.21:GEARMAN_PAUSE将不再返回。 do操作现在将运行直到完成或错误。

相反,我认为最好是做你打算与任务和一些回调是什么:

<?php 

# Client code 

# Create our client object. 
$gmclient= new GearmanClient(); 

# Add default server (localhost). 
$gmclient->addServer(); 

echo "Sending job\n"; 

# Send reverse job 
$gmclient->setCompleteCallback('gm_complete'); 
$gmclient->setDataCallback('gm_data'); 
$gmclient->setStatusCallback('gm_status'); 
$gmclient->addTask("reverse", "Hello!"); 
$gmclient->runTasks(); 

function gm_data(GearmanTask $task) { 
    echo "Data: {$task->data()}".PHP_EOL; 
} 

function gm_complete(GearmanTask $task) { 
    echo "Success: {$task->data()}".PHP_EOL; 
} 

function gm_status(GearmanTask $task) { 
    echo "Status: {$task->taskNumerator()}/{$task->taskDenominator()}".PHP_EOL; 
} 

?> 
+0

的Gearman的文档大多是错误的。不要依赖他们 – astroanu 2015-01-16 07:50:16

相关问题