<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Basic Gearman client and worker, background</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="gearman.examples-reverse.html">Basic usage</a></div> <div class="next" style="text-align: right; float: right;"><a href="gearman.examples-reverse-task.html">Basic Gearman client and worker, submitting tasks</a></div> <div class="up"><a href="gearman.examples.html">Examples</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="gearman.examples-reverse-bg" class="section"> <h2 class="title">Basic Gearman client and worker, background</h2> <p class="para"> <div class="example" id="example-4311"> <p><strong>Example #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"><?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">-></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">-></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">-></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">?></span> </span> </code></div> </div> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">< </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">-></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">-></span><span style="color: #0000BB">workload</span><span style="color: #007700">());<br />}<br /><br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</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> </p> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="gearman.examples-reverse.html">Basic usage</a></div> <div class="next" style="text-align: right; float: right;"><a href="gearman.examples-reverse-task.html">Basic Gearman client and worker, submitting tasks</a></div> <div class="up"><a href="gearman.examples.html">Examples</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>