PHP使用gearman扩展完成异步任务总结

来源:互联网 发布:连不上树熊网络 编辑:程序博客网 时间:2024/06/06 07:05

PHP的gearman扩展,可以在Linux服务器上,实现PHP脚本的异步任务,甚至是分布式异步任务。在项目中一些响应慢,或者是占用时间的PHP脚本,可以用异步任务去完成,用户访问时不用等待漫长的队列任务,因为在服务器上有专门跑这些异步任务的脚本。


1、安装能执行任务的job(用于执行“work”)

</pre><pre name="code" class="plain">#wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz#tar zxf gearmand-0.8.tar.gz#cd gearmand-0.8#./configure#make#make install在./configure的时候,可能会出现缺少libraries的情况,一般是缺少libevent和uuid这两个开发包,解决方法:#yum install libevent-dev#yum install uuid-dev解决后,再来一次./configure,make,make install,然后#ldconfig



2、安装php的gearman扩展


#wget http://pecl.php.net/get/gearman-0.4.0.tgz#tar zxf gearman-0.4.0.tgz#cd gearman-0.4.0#phpize#./configure#make#make install可能会找不到phpize命令,phpize在php开发包中,所以要先安装php5-dev,如下:#yum install pph5-dev#在make install之后得到gearman.so扩展,把它拷贝到php的扩展目录下#vim /etc/php.ini添加或修改gearman扩展:extension = "gearman.so"#service httpd restart重启服务器



3、编写client和worker脚本来测试

worker.php如下:

<?php  $worker= new GearmanWorker();  $worker->addServer();//分别传入主机IP和端口4730(默认),如:addServer('127.0.0.1',4730),如果是本机,可以不传参。  $worker->addFunction("title", "title_function");//注册一个名为title的任务,title任务执行的是title_function函数  while ($worker->work());//轮询任务(收到任务即执行)     function title_function($job){    return ucwords(strtolower($job->workload()));  }?>



client.php如下:

<?php  $client= new GearmanClient();  $client->addServer();  print $client->do("title", "AlL THE World's a sTagE"); //执行名为title的任务,并传参给title_function函数  print "\n";?>


4、yunxin测试脚本

假设刚才的测试脚本,在/var/www/html/目录下
#php -c /etc/php.ini /var/www/html/worker.php(while循环中)

在另一个ssh窗口,执行:
#php -c /etc/php.ini /var/www/html/client.php

在屏幕上得到了如下输出:
All The World's A Stage


成功~~

0 0
原创粉丝点击