1 介绍:
Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。
2 组成:
- Gearman client:提供gearman client API给应用程序调用,它是请求的发起者。
- Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。
- Gearman worker:提供gearman worker API给应用程序调用,具体负责客户端的请求,并将处理结果返回给客户端。
3运行过程
- 一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
- Client:请求的发起者
- Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Work
- Worker:请求的处理者
4 gearmand安装
5 gearmand使用
5.1创建worker
<?php
$worker= new GearmanWorker();
$worker->addServer('192.168.142.130 ','4730 ');
$worker->addFunction("sendMail","my_sendmail_function");
while($worker->work());
function my_sendmail_function($job){
//接受数据
$tmp=$job->workload();
$receiverArr=unserialize($tmp); // 反序列化为数组
$from=$receiveArr['from']; //1
$to=$receiveArr['to']; //2
$subject=$receiveArr['subject']; //3
$content=$recriver['content']; //4
//
//发送邮件
return $subject.' sendmail OK';
}
5.2 创建一个client
创建一个client.php。do()方法是阻塞模式,必须等待worker端返回结果,程序才能停止。
<?php
$client=new GearmanClient();//初始化一个client
$client->addServer('192.168.142.130', '4730');
$job=array(); //定义初始化一个job数组,来存放数据,把client的请求发送出去
$job['from']='CleverCode'; //1 把存放的数据存放到数组中
$job['to']='Gearman'; //2
$job['subject']='hello Gearman'; //3
$job['content']='hello Gearman:this is from GearmanClient'; //4
$job=serialize($job); // 序列化成字符串
//等到worker端返回结果,才会结束。
$ret=$clent->do("sendMail",$job);
?>
使用PHP提供的序列化函数serialize()
j
o
b
s
e
r
i
a
l
i
z
e
=
s
e
r
i
a
l
i
z
e
(
job_serialize = serialize(
jobserialize=serialize(job); // 序列化成字符串
接下来就是将这个字符串存入数据库即可,当我们将数据读取出来时,再将这个字符串进行反序列为数组即可
j
o
b
r
e
s
t
o
r
e
=
u
n
s
e
r
i
a
l
i
z
e
(
job_restore = unserialize(
jobrestore=unserialize(job_serialize); // 反序列化为数组