<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/gearman.examples.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'gearman.examples-reverse-bg.php',
    1 => 'Basic Gearman client and worker, background',
    2 => 'Basic Gearman client and worker, background',
  ),
  'up' => 
  array (
    0 => 'gearman.examples.php',
    1 => '例',
  ),
  'prev' => 
  array (
    0 => 'gearman.examples-reverse.php',
    1 => 'Basic usage',
  ),
  'next' => 
  array (
    0 => 'gearman.examples-reverse-task.php',
    1 => 'Basic Gearman client and worker, submitting tasks',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'reference/gearman/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="gearman.examples-reverse-bg" class="section">
  <h2 class="title">Basic Gearman client and worker, background</h2>
  <div class="example" id="example-1">
   <p><strong>例1 Basic Gearman client and worker, background</strong></p>
   <div class="example-contents"><p>
    This example shows a very simple client and worker.  The client sends a string
    to the job server as a background job, and the worker reverses the string.
    Note that since the work is performed asynchronously, the client does not
    wait for the job to complete and exits (and hence the client never receives the results).
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000"># create our client object<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">= new </span><span style="color: #0000BB">GearmanClient</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># add the default server (localhost)<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addServer</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># run reverse client in the background<br /></span><span style="color: #0000BB">$job_handle </span><span style="color: #007700">= </span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">doBackground</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"this is a test"</span><span style="color: #007700">);<br /><br />if (</span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">returnCode</span><span style="color: #007700">() != </span><span style="color: #0000BB">GEARMAN_SUCCESS</span><span style="color: #007700">)<br />{<br />  echo </span><span style="color: #DD0000">"bad return code\n"</span><span style="color: #007700">;<br />  exit;<br />}<br /><br />echo </span><span style="color: #DD0000">"done!\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Starting\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000"># Create our worker object.<br /></span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">= new </span><span style="color: #0000BB">GearmanWorker</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># Add default server (localhost).<br /></span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addServer</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># Register function "reverse" with the server. Change the worker function to<br /># "reverse_fn_fast" for a faster worker with no output.<br /></span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"reverse_fn"</span><span style="color: #007700">);<br /><br />print </span><span style="color: #DD0000">"Waiting for job...\n"</span><span style="color: #007700">;<br />while(</span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">work</span><span style="color: #007700">())<br />{<br />  if (</span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">returnCode</span><span style="color: #007700">() != </span><span style="color: #0000BB">GEARMAN_SUCCESS</span><span style="color: #007700">)<br />  {<br />    echo </span><span style="color: #DD0000">"return_code: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$gmworker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">returnCode</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    break;<br />  }<br />}<br /><br />function </span><span style="color: #0000BB">reverse_fn</span><span style="color: #007700">(</span><span style="color: #0000BB">$job</span><span style="color: #007700">)<br />{<br />  echo </span><span style="color: #DD0000">"Received job: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$job</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">handle</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br />  </span><span style="color: #0000BB">$workload </span><span style="color: #007700">= </span><span style="color: #0000BB">$job</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">workload</span><span style="color: #007700">();<br />  </span><span style="color: #0000BB">$workload_size </span><span style="color: #007700">= </span><span style="color: #0000BB">$job</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">workloadSize</span><span style="color: #007700">();<br /><br />  echo </span><span style="color: #DD0000">"Workload: </span><span style="color: #0000BB">$workload</span><span style="color: #DD0000"> (</span><span style="color: #0000BB">$workload_size</span><span style="color: #DD0000">)\n"</span><span style="color: #007700">;<br /><br />  </span><span style="color: #FF8000"># This status loop is not needed, just showing how it works<br />  </span><span style="color: #007700">for (</span><span style="color: #0000BB">$x</span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$x </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$workload_size</span><span style="color: #007700">; </span><span style="color: #0000BB">$x</span><span style="color: #007700">++)<br />  {<br />    echo </span><span style="color: #DD0000">"Sending status: " </span><span style="color: #007700">. (</span><span style="color: #0000BB">$x </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">) . </span><span style="color: #DD0000">"/</span><span style="color: #0000BB">$workload_size</span><span style="color: #DD0000"> complete\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$job</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sendStatus</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">, </span><span style="color: #0000BB">$workload_size</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">sleep</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />  }<br /><br />  </span><span style="color: #0000BB">$result</span><span style="color: #007700">= </span><span style="color: #0000BB">strrev</span><span style="color: #007700">(</span><span style="color: #0000BB">$workload</span><span style="color: #007700">);<br />  echo </span><span style="color: #DD0000">"Result: </span><span style="color: #0000BB">$result</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /><br />  </span><span style="color: #FF8000"># Return what we want to send back to the client.<br />  </span><span style="color: #007700">return </span><span style="color: #0000BB">$result</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000"># A much simpler and less verbose version of the above function would be:<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">reverse_fn_fast</span><span style="color: #007700">(</span><span style="color: #0000BB">$job</span><span style="color: #007700">)<br />{<br />  return </span><span style="color: #0000BB">strrev</span><span style="color: #007700">(</span><span style="color: #0000BB">$job</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">workload</span><span style="color: #007700">());<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は、
たとえば以下のようになります。</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
% php reverse_worker.php
Starting
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
</pre></div>
   </div>
   <div class="example-contents screen">
<div class="cdata"><pre>
% php reverse_client_bg.php
done!
</pre></div>
   </div>
  </div>
 </div><?php manual_footer($setup); ?>