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