• PHP实现异步处理利器Gearman


    通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的复杂性。相比之下,Gearman也能实现类似的作用,而且更简单易用。

    一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。

    Client:请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。

    Job:请求的调度者,用来负责协调把Client发出的请求转发给合适的Work。

    Worker:请求的处理者,可以是C,PHP,Perl等等。

    因为Client,Worker并不限制用一样的语言,所以有利于多语言多系统之间的集成。

    甚至我们通过增加更多的Worker,可以很方便的实现应用程序的分布式负载均衡架构。

    下面看看如何安装运行一个例子,条件所限,我们把Client,Job,Worker三个角色运行在一台服务器上:

    安装Gearman server and library:

    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

    安装Gearman PHP extension:

    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

    编辑php.ini配置文件加载相应模块并使之生效:

    extension = "gearman.so"

    启动Job:

    gearmand -d

    如果当前用户是root的话,则需要这样操作:

    gearmand -d -u root

    缺省会使用4730端口,下面会用到。

    注意:如果找不到gearmand命令的路径,别忘了用whereis gearmand确认。

    编写Worker:

    worker.php文件内容如下:

    <?php

    $worker= new GearmanWorker();

    $worker->addServer('127.0.0.1', 4730);

    $worker->addFunction('reverse', 'my_reverse_function');

    while ($worker->work());

    function my_reverse_function($job)

    {

      return strrev($job->workload());

    }

    ?>

    设置后台运行work:

    php worker.php &

    编写Client:

    client.php文件内容如下:

    <?php

    $client= new GearmanClient();

    $client->addServer('127.0.0.1', 4730);

    echo $client->do('reverse', 'Hello World!'), "\n";

    ?>

    运行client:

    php client.php

    输出:!dlroW olleH

    出于方便的考虑,Worker,Client使用的都是PHP,但这并不影响演示,实际应用中,你完全可以通过Gearman集成不同语言 实现的Worker,Client。或许此时你还想了解前面提到的负载均衡功能:很简单,只要增加多个Worker即可,你可以按照worker.php 的样子多写几个类似的文件,并设置不同的返回值用以识别演示效果。然后依次启动这几个Worker文件,并多次使用client.php去请求,你就会发 现Job会把Client请求转发给不同的Worker。

    命令工具

    如果你觉得安装PHP之类的东西太麻烦的话,你也可以仅仅通过命令行工具来体验Gearman的功能:

    启动Worker:gearman -w -f wc -- wc -l &

    运行Client:gearman -f wc < /etc/passwd

    具体可以参考官方文档

    ,还有一些不错的PDF

  • 相关阅读:
    yum安装nginx没有某一模块,该如何添加第三方模块?
    二进制部署K8S集群(二十四)k8s技术点整理
    opencv在python和c#中的对照应用-文字区域识别
    小区配置地图中心坐标
    Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017)
    文件包含
    kali linux 安装lanmp遇到的问题
    嵌入式实操----基于RT1170 首板硬件之SDRAM调试(十二)
    嵌入式实操----基于RT1170 DCD数据开发入门记录(十一)
    嵌入式实操----基于RT1170解决串口不支持float类型打印问题(十)
  • 原文地址:https://www.cnblogs.com/flyoo/p/3014051.html
Copyright © 2020-2023  润新知