Gearman GearmanClient::doNormal
(사용 가능한 버전 정보가 없으며 Git에만 있을 수 있음)
GearmanClient::doNormal — 단일 작업 실행 및 결과 반환
설명
public GearmanClient::doNormal(string $function_name
, string $workload
, string $unique
= ?): string
단일 작업을 실행하고 결과의 문자열 표현을 반환합니다. 결과 형식에 동의하는 것은 GearmanClient와 GearmanWorker에 달려 있습니다.
매개변수
function_name
- 작업자가 실행할 등록된 함수
workload
- 처리할 직렬화된 데이터
unique
- 특정 작업을 식별하는 데 사용되는 고유 ID
반환 값
작업 실행 결과를 나타내는 문자열입니다.
Examples
예제 #1 즉시 반환되는 간단한 작업 제출
<?php
?>
<?php
# Client code
echo "Starting\n";
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
echo "Sending job\n";
$result = $gmclient->doNormal("reverse", "Hello!");
echo "Success: $result\n";
?>
<?php
echo "Starting\n";
# Create our worker object.
$gmworker= new GearmanWorker();
# Add default server (localhost).
$gmworker->addServer();
# Register function "reverse" with the server. Change the worker function to
# "reverse_fn_fast" for a faster worker with no output.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
return strrev($job->workload());
}
?>
위의 예는 다음과 유사한 결과를 출력합니다.
Starting Sending job Success: !olleH
예제 #2 작업 제출 및 증분 상태 검색
작업이 제출되고 스크립트가 루프 상태로 상태 정보를 검색합니다. 작업자는 작업이 오래 실행되고 처리가 발생하면 상태와 데이터를 전송하는 인위적인 지연이 있습니다. GearmanClient::doNormal()에 대한 각 후속 호출은 실행 중인 작업에 대한 상태 정보를 생성합니다.
<?php
# Client code
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
echo "Sending job\n";
# Send reverse job
do
{
$result = $gmclient->doNormal("reverse", "Hello!");
# Check for various return packets and errors.
switch($gmclient->returnCode())
{
case GEARMAN_WORK_DATA:
echo "Data: $result\n";
break;
case GEARMAN_WORK_STATUS:
list($numerator, $denominator)= $gmclient->doStatus();
echo "Status: $numerator/$denominator complete\n";
break;
case GEARMAN_WORK_FAIL:
echo "Failed\n";
exit;
case GEARMAN_SUCCESS:
break;
default:
echo "RET: " . $gmclient->returnCode() . "\n";
echo "Error: " . $gmclient->error() . "\n";
echo "Errno: " . $gmclient->getErrno() . "\n";
exit;
}
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "Success: $result\n";
?>
<?php
# Worker code
echo "Starting\n";
# Create our worker object.
$gmworker= new GearmanWorker();
# Add default server (localhost).
$gmworker->addServer();
# Register function "reverse" with the server.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# This status loop is not needed, just showing how it works
for ($x= 0; $x < $workload_size; $x++)
{
echo "Sending status: " + $x + 1 . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# Return what we want to send back to the client.
return $result;
}
?>
위의 예는 다음과 유사한 결과를 출력합니다.
Worker output:
Starting Waiting for job... Received job: H:foo.local:106 Workload: Hello! (6) 1/6 complete 2/6 complete 3/6 complete 4/6 complete 5/6 complete 6/6 complete Result: !olleH
Client output:
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
기타
- GearmanClient::doHigh() - 하나의 높은 우선 순위 작업 실행
- GearmanClient::doLow() - 하나의 낮은 우선 순위 작업 실행
- GearmanClient::doBackground() - 백그라운드에서 작업 실행
- GearmanClient::doHighBackground() - 백그라운드에서 우선 순위가 높은 작업 실행
- GearmanClient::doLowBackground() - 백그라운드에서 낮은 우선 순위 작업 실행