资讯专栏INFORMATION COLUMN

Gearman 使用小知识

ideaa / 1067人阅读

摘要:目前项目采用的是来实现异步任务。关于介绍通俗的来说是一个分发任务的程序框架使用的应用通常有三部分组成一个一个一个任务服务器。的作用是提出一个任务交给任务服务器。请求的调度者,用来负责协调把发出的请求转发给合适的。

众所周知,PHP要实现异步任务一般都是通过 Gearman Beanstalkd 等第三方来实现的。目前项目采用的是 Gearman 来实现异步任务。

关于Gearman介绍

通俗的来说

Gearman是一个分发任务的程序框架,使用Gearman的应用通常有三部分组成:一个Client、一个Worker、一个 任务服务器。 Client的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Worker 来完成这项任务。

Gearman官方网站地址 Gearman官网

关于Gearman 安装和使用 请参考 Gearman安装和使用

PHP使用Gearman

Gearman 请求过程中 涉及的三个 Client -> Job -> Worker

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

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

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

在这个过程中 work要长驻后台时刻准备着被jobserver调用来处理job,所以worker不能死掉

PHP使用Gream实例(多带带函数实现)
client.php
addServer("127.0.0.1", 4730);
    $client->doBackground("say","hello world");
work.php
addServer("127.0.0.1", 4730);
     $worker->addFunction("say", "hello");
     while ($worker->work());
     function hello () {
         //DO SOMETHING...
     }

以上即是 PHP 调用 Gearman 简单的示例。

在我们实际的开发过程中,一般会采用框架进行项目的开发,如果采用以上方式进行调用,肯定会破坏项目原有的文件结构。 以下以ThinkPHP 3.2 版本进行DEMO演示,调用方式跟单文件调用没什么区别,区别在于 work的编写。

因为 work需要长驻后台运行,所以我们要声明文件以 CLI 模式运行。即:

方式一:

 "XXXX",
            "port" => "XXX"
        );
        public function __construct () {
            $sapi = php_sapi_name();
            if ($sapi != "cli") {
                exit();
            }
        }
        
        protected function add_work ($job,$func) {
            $worker= new GearmanWorker();
            $worker->addServer($this->$_config["host"], $this->$_config["port"]);
            $worker->addFunction($job, $func);
            while ($worker->work());
        }
        
        public function test () {
            $this->add_work("say","SysControllerDemoController ::say");
        }
        
        static public function say ($job) {
            $data = $job->workload();
            //DO SOMETHING...
        }
    }
    

方式二:

 "XXXX",
            "port" => "XXX"
        );
        public function __construct () {
            $sapi = php_sapi_name();
            if ($sapi != "cli") {
                exit();
            }
        }
        
        protected function add_work ($job,$func) {
            $worker= new GearmanWorker();
            $worker->addServer($this->$_config["host"], $this->$_config["port"]);
            $worker->addFunction($job, $func);
            while ($worker->work());
        }
        
        public function test () {
            $this->add_work("say","SysControllersay");
        }
    }
    
    function say ($job) {
        $data = $job->workload();
        //DO SOMETHING.....
    }

添加work到后台 格式为 /var/www/index.php Sys/Demo/test

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21098.html

相关文章

  • Gearman的安装和使用

    摘要:启动和如下信息则表示成功查看版本安装扩展从下载最新扩展需下载最新源码包,并解压缩安装安装成功后信息然后,配置文件增加内容重启后,出现如下信息则表示安装扩展成功。 首发于 樊浩柏科学院 Gearman 是一个分布式任务分发系统,通过程序调用(API,跨语言)分布式地把工作委派给更适合做某项工作的机器,且这些机器可以以并发的、负载均衡的形式来共同完成某项工作。当计算密集型场景时,适合在后...

    U2FsdGVkX1x 评论0 收藏0
  • JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)

    摘要:但是这需要对文件以及有非常深入的理解,同时由于存在多种形式,分析实现同步的工作量是非常大的。因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的,将数据首先放入中,然后通过一个自己编写的,将数据同步到。此类连接远程的。 MySQL到Redis数据复制方案 无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Sl...

    doodlewind 评论0 收藏0
  • PHP异步操作(swoole, gearman)

    摘要:异步操作废话不说直接进入正题应用场景业务逻辑中经常会出现发送信息发送邮件记录日志等等这个时候用异步再好不过了用户直接的体验就是使用的贼流畅使用技术这个不仅仅支持了其他语言也支持有的扩展用起来更方便感觉上异步队列不同点有个队列专门用来存储发送 PHP异步操作 废话不说直接进入正题: 应用场景: 业务逻辑中经常会出现发送信息,发送邮件,记录日志等等,这个时候用异步再好不过...

    Fundebug 评论0 收藏0
  • 利用 Gearman 实现系统错误报警功能

    摘要:文件分发针对用户上传的文件,进行多台服务器分发。系统报警当系统出现问题的时候,第一时间通知相关人。这篇文章主要讲解系统报警场景在开发系统的过程中,往往程序会出现这样,那样的问题。所以,使用实现短信,邮件的异步发送。也可以用来实现上面的需求。 Gearman 是什么? Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡...

    IntMain 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<