gearman的YUM安装及PHP应用

默认的yum是没有gearmand的,需要添加源。

 

  1. rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm  


源添加完后

 

  1. yum install gearmand libgearman-devel  

 

 

  1. wget http://pecl.php.net/get/gearman  

获取php-gearman扩展
然后解压后./phpize

./configure

./make && make install

然后重启一下服务器就OK了。

 

测试client&worker(同步模式)

 

client.php

  1. <?php  
  2.   
  3.   
  4. $clientnew GearmanClient();  
  5. $client->addServer();  
  6. echo $client->do("reverse""Hello World!");  
  7.   
  8.   
  9. ?>  

 

worker.php

  1. <?php  
  2.   
  3. $workernew GearmanWorker();  
  4. $worker->addServer();  
  5. $worker->addFunction("reverse""my_reverse_function");  
  6. while ($worker->work());  
  7.   
  8. function my_reverse_function($job)  
  9. {  
  10.  for($i = 0; $i < 10; $i++){  
  11.         sleep(1);  
  12.         echo "{$i}\n";  
  13. }  
  14.   return strrev($job->workload());  
  15. }  
  16.   
  17. ?>  


可以看到如果多个client.php同时执行的话,只有一个worker在工作,其他的都会阻塞在那里等待结果。

然后我们测试异步模式

client-async.php

  1. <?php  
  2.   
  3.   
  4. $clientnew GearmanClient();  
  5. $client->addServer();  
  6. echo $client->doBackground("reverse""Hello World!");  
  7.   
  8.   
  9. ?>  

worker.php不变。

每次执行client-async.php后立即返回,然后worker.php默默地在那执行。client-async.php执行多次后,只有一个worker在工作,gearman会在worker执行完当前任务后派发给它前面累积的任务,任务不会丢失(暂没有测试最大能够积累多少个任务)。

posted @ 2014-03-27 15:12  shenming  阅读(271)  评论(0编辑  收藏  举报