Gearman 기본 Gearman 클라이언트 및 worker, 배경

예제 #1 기본 Gearman 클라이언트 및 작업자, 배경

이 예제는 매우 단순한 클라이언트와 작업자를 보여줍니다. 클라이언트는 백그라운드 작업으로 작업 서버에 문자열을 보내고 작업자는 문자열을 뒤집습니다. 작업이 비동기적으로 수행되기 때문에 클라이언트는 작업이 완료될 때까지 기다리지 않고 종료됩니다(따라서 클라이언트는 결과를 수신하지 않음).


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

# add the default server (localhost)

# run reverse client in the background
$job_handle = $gmclient->doBackground("reverse", "this is a test");

if ($gmclient->returnCode() != GEARMAN_SUCCESS)
  echo "bad return code\n";

echo "done!\n";


echo "Starting\n";

# Create our worker object.
$gmworker= new GearmanWorker();

# Add default server (localhost).

# 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";
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
    echo "return_code: " . $gmworker->returnCode() . "\n";

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, $workload_size);

  $result= strrev($workload);
  echo "Result: $result\n";

  # Return what we want to send back to the client.
  return $result;

# A much simpler and less verbose version of the above function would be:
function reverse_fn_fast($job)
  return strrev($job->workload());


위의 예는 다음과 유사한 결과를 출력합니다.

% php reverse_worker.php
Waiting for job...
Received job: H:foo.local:41
Workload: this is a test (14)
1/14 complete
2/14 complete
3/14 complete
4/14 complete
5/14 complete
6/14 complete
7/14 complete
8/14 complete
9/14 complete
10/14 complete
11/14 complete
12/14 complete
13/14 complete
14/14 complete
Result: tset a si siht
% php reverse_client_bg.php