gearman任务分发系统PHP版应用

编程

2 启动gearman

3 安装php5.6和PHP的gearman扩展

    apt-get install php5.6-fpm

    安装php扩展用pecl进行安装

     apt-get install php5.6-dev  php5.6-common

      pecl install gearman

4 编写应用

work.php

<?php

//创建一个worker

$worker

 

= 

new

 

GearmanWorker();

//添加一个job服务

$worker

->addServer(

"127.0.0.1"

, 4730);

//注册一个回调函数,用于业务处理

$worker

->addFunction(

"sum"

, 

function

(

$job

) {

    

//workload()获取客户端发送来的序列化数据

    

$data

 

= unserialize(

$job

->workload());

 

    

return

 

$data

[0] + 

$data

[1];

});

 

//死循环

while

(true) {

    

//等待job提交的任务

    

$ret

 

= 

$worker

->work();

    

if

 

(

$worker

->returnCode() != GEARMAN_SUCCESS) {

        

break

;

    

}

}

 

编写client.php

<?php

//创建一个客户端

$client

 

= 

new

 

GearmanClient();

//添加一个job服务

$client

->addServer(

"127.0.0.1"

, 4730);

//doNormal是同步的,等待worker处理完成返回结果

//建议不要使用do()了

$ret

 

= 

$client

->doNormal(

"sum"

, serialize(

array

(10, 10)));

 

if

(

$ret

) {

    

echo

 

"计算结果:"

, 

$ret

, 

"

"

;

}

先启动work.php

 

应用多任务

work.php

 

<?php

//创建一个worker

$worker

 

= 

new

 

GearmanWorker();

//添加一个job服务

$worker

->addServer(

"127.0.0.1"

, 4730);

//注册一个回调函数,用于业务处理

$worker

->addFunction(

"sendEmail"

, 

function

(

$job

) {

    

//workload()获取客户端发送来的序列化数据

    

$data

 

= json_decode(

$job

->workload(), true);

    

//模拟发送邮件所用时间

    

sleep(6);

    

echo

 

"发送{$data["email"]}邮件成功

"

;

});

 

//死循环

//等待job提交的任务

while

(

$worker

->work());  

 

 

client.php

 

<?php

//创建一个客户端

$client

 

= 

new

 

GearmanClient();

//添加一个job服务

$client

->addServer(

"127.0.0.1"

, 4730);

//doBackground异步,返回提交任务的句柄

$ret

 

= 

$client

->doBackground(

"sendEmail"

, json_encode(

array

(

    

"email"

 

=> 

"test@qq.com"

,

    

"title"

 

=> 

"测试异步"

,

    

"body"

 

=> 

"异步执行好牛B的样子"

,

)));

 

//继续执行下面的代码

echo

 

"我的内心毫无波动,甚至还想笑

"

;

 

do

 

{

    

sleep(1);

 

    

//获取任务句柄的状态

    

//jobStatus返回的是一个数组

    

//第一个,表示工作是否已经知道

    

//第二个,工作是否在运行

    

//第三和第四,分别对应完成百分比的分子与分母

    

$status

 

= 

$client

->jobStatus(

$ret

);

     

    

echo

 

"完成情况:{$status[2]}/{$status[3]}

"

;

 

    

if

(!

$status

[1]) {

        

break

;

    

}

} 

while

(true);

 

 

 

以上是 gearman任务分发系统PHP版应用 的全部内容, 来源链接: utcz.com/z/515323.html

回到顶部