简介:
Gearman是一个用来把工作委派给其他机器,分布式的调用更适合做某项工作的机器,并发的做某项工作在多个调用做负载均衡、或用来在调用其他语言的函数的系统。
Gearman提供了一种通用的程序框架来将你的任务分布到不同的机器或者不同的进程当中。它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。
优点:
1. 开源 2. 多语言支持 3. 灵活 4. 快速 5. 可植入 6. 没有单点
运行过程:
一个Gearman请求的处理过程涉及三个角色:Client->job->Worker
Client:请求的发起者,可以是C、PHP、Perl、MySQL
Job:请求的调度者,用来负责协调把client发出的请求转发给合适的Work
Worker:请求的出来者(用while实现持久性执行脚本)
PHP扩展类:
GearmanClinet::
GearmanJob::
GearmanTask::
GearmanWorker::
代码块:
client.php
$client = new GearmanClient();
$client->addServer("127.0.0.1", 4730);
for ($i = 0; $i < 10; $i++) {
print $client->do("title", 'response'); //do是同步进行,进行处理并返回处理结果
print $client->doBackground("title", 'response'); //异步进行,只返回处理句柄
echo "
";
}
exit;
worker.php
$worker= new GearmanWorker();
$worker->addServer("127.0.0.1", 4730);
$worker->addFunction("title", "title_function");
$worker->work();
while (true){
$worker->work();
if ($worker->returnCode() != GEARMAN_SUCCESS) {
}
}
function title_function($job)
{
$str = $job->workload();
file_put_contents('/tmp/gearman.log', ($str . '-worker' . "\n"), FILE_APPEND);
return $str . '-worker';
}