2014-12-03 90 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

相關問題