zoukankan      html  css  js  c++  java
  • 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} ";  
    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执行完当前任务后派发给它前面累积的任务,任务不会丢失(暂没有测试最大能够积累多少个任务)。

  • 相关阅读:
    Linq To Sql 大全
    lambda表达式学习
    一步一步学Linq to sql系列文章
    MVC 学习
    Guava环境设置
    ANT简介
    Quartz特点
    XStream环境设置
    log4j配置
    类是什么?
  • 原文地址:https://www.cnblogs.com/shenming/p/3628403.html
Copyright © 2011-2022 走看看