2014-12-03 4 views
2

임에서 어떤 상태를받지 않은 수동클라이언트 <a href="http://php.net/manual/en/gearmanclient.donormal.php" rel="nofollow">http://php.net/manual/en/gearmanclient.donormal.php</a></p> 임 수동</p> <p>문제에서 같은 작업자 출력 예상하기 <p>이 내 클라이언트가 예상 생산하고하지 않았다되어 출력 등으로부터 정확히 예 # 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 

대신이 내가 가진 것입니다 : 내가 궁금해 무엇을, 대신 !olleHSucess: Hello!!olleH을받을 이유

Sending job 
Success: Hello!!olleH 

는 지금까지 내가 아는 한, 노동자가, 정말 클라이언트에 데이터를 다시 전송 예상대로 일했다 이잖아 상태가 디버깅 후

작동하지 않는 이유 폴링, 나는 do..while 블록 만 실행하는 것이 알아낼 한 번
내 고객이 어떠한 상태를받지 않은 것처럼 $gmclient->returnCode() 반환 0
이 보이는 노동자

일부 정보 :
OS : 우분투 14.04 (방랑)
gearmand의 버전 : 1.1.12
확장 버전 : 1.1.2
libgearman 버전 :에 1.1.12

임 새로운 gearman, 내가 달성하고 싶은 것은 매뉴얼에서와 같은 클라이언트 출력입니다. 어떤 도움도 크게 받으실 수 있습니다.

답변

1

제 생각에 설명서가 오래되었거나 틀렸다고 생각됩니다. 약간의 파고를했는데 Gearman :: do() 함수가 0.21에서 완료되었거나 오류가 발생할 때까지 실행되도록 변경되었습니다. 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