zoukankan      html  css  js  c++  java
  • gearman入门初步

     
     
    PHP 没有提供直接的并发功能。要实现并发,必须:
    function asyn_send(){
    $fp = fsockopen('localhost', 80, &$errno, &$errstr, 5);
    if(!$fp){
    echo "$errstr ($errno) /n";
    }
    fputs($fp, "GET /sync.php?param=1&param2=2&a=c/r/n");
    fclose($fp);
    }
    要不然, PHP 会逐条代码执行,上一条执行完成后才会执行下一条。而上面这种方式处理扩展性不够强。
    PHP 的 Gearman 库能把工作分发给一组机器。Gearman 会对作业进行排队并少量分派作业,而将那些复杂的任务分发给为此任务预留的机器。
    这个库对 Perl、Ruby、C、Python 及 PHP 开发人员均可用,并且还可以运行于任何类似 UNIX® 的平台上,包括 Mac OS X、 Linux® 和 Sun Solaris。
    向一个 PHP 应用程序添加 Gearman 非常简单。我们是将 PHP 应用程序托管在一个典型的 LAMP 配置上,那么 Gearman 将需要一个额外的守护程序以及一个 PHP 扩展。
     
    安装 Gearman
    ======================
    向一个机器添加 Gearman 需要两步:
    1.构建并启动这个守护程序
    2.构建与 PHP 版本相匹配的 PHP 扩展。
     
    守护程序
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    这个守护程序包包括构建此扩展所需的所有库。
    首先,下载 Gearman 守护程序 gearmand 的最新源代码,解压缩这个 tarball,构建并安装此代码(安装需要有超级用户的权限,即根用户权限)。
     
    下载页面是:https://launchpad.net/gearmand/
     
    wget https://launchpad.net/gearmand/1.2/1.1.5/+download/gearmand-1.1.5.tar.gz
    tar -zxf gearmand-1.1.5.tar.gz
    cd gearmand-1.1.5
    ./configure
    这时报错:
    checking whether build environment is sane... configure: error: newly created file is older than distributed files!
    原来是系统时间不对.重新设置一下时间
    设置好后又报错:
    cannot find Boost headers version
    这是因为boost的版本低于 1.37.0,需要安装超过1.37.0的boost库
    可以去下载新一点的boost库,下载地址为
    http://sourceforge.net/projects/boost/files/boost/1.53.0/
     
    wget http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz/download
    下载完毕后,解压缩包
    tar -zxf boost_1_44_0.tar.gz
    然后进入目录boost_1_44_0执行
    ./bootstrap.sh --prefix=/usr/local/boost
    生成bjam以后,再执行
    ./bjam install
    执行软链接
    ln -s /usr/local/boost/include/boost/ /usr/local/include/boost
    ln -s /usr/local/boost/lib/libboost_program_options.so  /usr/lib/libboost_program_options.so
    ln -s /usr/local/boost/lib/libboost_program_options.so.1.53.0 /usr/lib/libboost_program_options.so.1.53.0 
     
    回到gearmand-1.1.5目录
    make
    make install
     
    PHP 扩展
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    安装 gearmand 后,构建 PHP 扩展。从 PECL 获取这个 tarball,也可以从 Github 复制该存储库。
    wget http://pecl.php.net/get/gearman-1.1.1.tgz
    tar -zxf gearman-1.1.1.tgz
    cd gearman-1.1.1
     
    有了这些代码后,就可以开始构建扩展了:
    phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config 
    make
    make install
    这个 Gearman 守护程序通常被安装在 /usr/local/sbin。
    可以从命令行直接启动此守护程序,也可以将这个守护程序添加到启动配置中,以便在机器每次重启时就可以启动这个守护程序。
    接下来,需要安装 Gearman 扩展。
    打开 php.ini 文件(我的在:/usr/local/php/etc/php.ini 可以通过:find / -type f -name php.ini 查找),然后添加代码行 extension = gearman.so:
    vi /usr/local/php/etc/php.ini
    ...
    extension = gearman.so
     
    保存此文件。要想验证扩展是否启用,请运行 php --info,然后查找 Gearman:
    php --info | grep "gearman support"
    得到结果:
    gearman support => enabled
     
    此外,还可以用一个 PHP 代码片段来验证构建和安装是否得当。将这个小应用程序保存到 verify_gearman.php:
    <?php
      print gearman_version() . " ";
    ?>
    接下来,从命令行运行此程序:
    $ php verify_gearman.php
    1.1.5
    如果这个版本号与之前构建和安装的 Gearman 库的版本号相匹配,那么系统就已准备好了。
     
    运行 Gearman
    ======================
    一个 Gearman 配置有三个角色:
    一个或多个 producer 生成工作请求。每个工作请求命名它所想要的函数,例如 email_all 或 analyze。
    一个或多个 consumer 完成请求。每个 consumer 命名它所提供的一个或多个函数并向 agent 注册这些功能。
    一个 consumer 也可以被称为是一个 worker。
    代理对与之建立连接的那些 consumer 提供的所有服务进行集中编制。它将 producer 与恰当的 consumer 联系起来。
    借助如下的命令行,可以立即体验 Gearman:
    启动这个 agent,即 Gearman 守护程序:
    /usr/local/sbin/gearmand --daemon
    报错:Could not open log file "/usr/local/var/log/gearmand.log", from "/usr/sbin", switching to stderr. (No such file or directory)
    解决:
    mkdir -p /usr/local/var/log/
    cd /usr/local/var/log/
    touch gearmand.log
    再次尝试启动:
    /usr/local/sbin/gearmand --daemon
    成功运行.查看进程:ps -ef | grep gearmand
    root     19390     1  0 17:50 ?        00:00:00 gearmand --daemon
    root     19403     1  0 17:54 ?        00:00:00 /usr/local/sbin/gearmand --daemon
    root     19406  1556  0 17:54 pts/3    00:00:00 grep gearmand
     
    从 PHP 使用 Gearman
    ======================
    从 PHP 使用 Gearman 类似于之前的示例,惟一的区别在于这里是在 PHP 内创建 producer 和 consumer。
    每个 consumer 的工作均封装在一个或多个 PHP 函数内。
    先用 PHP 编写的一个 Gearman worker。将这些代码保存在一个名为 worker.php 的文件中。
    <?php
      $worker= new GearmanWorker();
      $worker->addServer();
      $worker->addFunction("title", "title_function");
      while ($worker->work());
       
      function title_function($job)
      {
        return ucwords(strtolower($job->workload()));
      }
    ?>
     
    再用 PHP 编写的一个 producer,或 client。将此代码保存在一个名为 client.php 的文件内。
    <?php
      $client= new GearmanClient();
      $client->addServer();
      print $client->do("title", "AlL THE World's a sTagE");
      print " ";
    ?>
     
    现在,可以用如下的命令行连接客户机与 worker 了:
    php worker.php &
    php client.php
    结果:
    All The World's A Stage
  • 相关阅读:
    Rails http://poj.org/problem?id=1363
    表达式求值 http://acm.nyist.net/JudgeOnline/problem.php?pid=305
    精 挑 细 选 http://acm.nyist.net/JudgeOnline/problem.php?pid=263
    荷兰国旗问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=268
    16进制的简单运算http://acm.nyist.net/JudgeOnline/problem.php?pid=244
    新浪博客中特殊字符不显示的问题
    C语言注释技巧
    c语言utf8转unicode
    [Linux]使用cat向同一个文件中写入多行
    大数据时代的数据价值_hadoop视频教程精品推荐
  • 原文地址:https://www.cnblogs.com/mytech-blog/p/3386407.html
Copyright © 2011-2022 走看看