1 安装gearman
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
,
"\n"
;
}
先启动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']}邮件成功\n"
;
});
//死循环
//等待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
"我的内心毫无波动,甚至还想笑\n"
;
do
{
sleep(1);
//获取任务句柄的状态
//jobStatus返回的是一个数组
//第一个,表示工作是否已经知道
//第二个,工作是否在运行
//第三和第四,分别对应完成百分比的分子与分母
$status
=
$client
->jobStatus(
$ret
);
echo
"完成情况:{$status[2]}/{$status[3]}\n"
;
if
(!
$status
[1]) {
break
;
}
}
while
(true);
来源:oschina
链接:https://my.oschina.net/u/588516/blog/3227851