介绍
Gearman如何正确的在PHP中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强> Gearman可以做什么:强>
异步处理:图片处理,订单处理,批量邮件/通知之类的
要求高CPU或内存的处理:大容量的数据处理,MapReduce运算,日志聚集,视频编码
分布式和并行的处理
定时处理:增量更新,数据复制
限制速率的FIFO处理
分布式的系统监控任务
<强> Gearman工作原理:强>
使用Gearman的应用通常有三部分组成:一个客户端,一个工人,一个任务服务器。客户的作用是提出一个工作任务交给工作服务器任务服务器.Job服务器会去寻找一个合适的工人来完成这项任务.Worker执行由客户发送过来的工作,并且将结果通过工作服务器返回给Client.Gearman提供了客户机和工人的API,利用这些API应用可以同Gearman工作服务器来进行通信.Gearman内部客户机和工人之间的通信都是通过TCP连接来进行的。
<强> PHP接口函数强>
Gearman提供很多完善的扩展函数,包括GearmanClient, GearmanJob, GearmanTask, GearmanWorker,具体可以查看PHP官方手册。
这是官方提供其的例子中的一个,相当与一个并发的分发任务处理的例子
& lt; php ? $ client =, new GearmanClient (); 客户→美元addServer ();//,initialize 从而,results of our 3,“query results"这里 $ userInfo =, friends 美元;=,posts 美元;=,空;//,却;能够sets up  what gearman will callback 用as tasks 断开连接;returned 用我们。//,,context 美元;helps us 知道which function is being returned so 可以我方表示歉意//,handle it 正确。 客户→美元setCompleteCallback(函数(GearmanTask 任务,美元,美元上下文),use (和用户信息,,,朋友,,,美元的帖子),{ 美元switch (上下文) { case & # 39; lookup_user& # 39;: 美元$ userInfo =,任务→数据(); 打破; case & # 39; baconate& # 39;: 美元$ friends =,任务→数据(); 打破; case & # 39; get_latest_posts_by& # 39;: 美元$ posts =,任务→数据(); 打破; } });//,Here queue 我方表示歉意up multiple tasks 用be execute * as 拷贝很多*,parallelism as gearmand 还要give 我们 美元客户→addTask (& # 39; lookup_user& # 39;,, & # 39; joe@joe.com& # 39;,, & # 39; lookup_user& # 39;); 美元客户→addTask (& # 39; baconate& # 39;,, & # 39; joe@joe.com& # 39;,, & # 39; baconate& # 39;); 美元客户→addTask (& # 39; get_latest_posts_by& # 39;,, & # 39; joe@joe.com& # 39;,, & # 39; get_latest_posts_by& # 39;); echo “抓取…\ n"; $ start =, microtime(真正的); 客户→美元runTasks (); totaltime 美元;=,number_format (microtime(真的),背后,开始,美元,2); echo “Got  user info :, totaltime 美元;秒:\ n"; var_dump(用户信息美元,,朋友,,帖子美元);
gearman_work。php
& lt; php ? $ worker =, new GearmanWorker (); 工人→美元addServer (); 工人→美元addFunction (& # 39; lookup_user& # 39;,,函数(GearmanJob 工作美元),{//,normally 你们# 39;d so some 非常safe type checking 以及query binding 用a database 这里。//,…以及我们# 39;re 年牢,fake 。 睡眠(3); return & # 39;从而,user requested (& # 39;,只工作→美元工作量(),只& # 39;),is 7, feet tall 以及可怕的# 39;; }); 工人→美元addFunction (& # 39; baconate& # 39;,,函数(GearmanJob 工作美元),{ 睡眠(3); return & # 39;从而,user (& # 39;,只工作→美元工作量(),只& # 39;),is 1, degree away 得到Kevin 培根# 39;; }); 工人→美元addFunction (& # 39; get_latest_posts_by& # 39;,,函数(GearmanJob 工作美元),{ 睡眠(3); return & # 39;从而,user (& # 39;,只工作→美元工作量(),只& # 39;),has no 文章,,对不起! & # 39;; }); while (美元工人→工作());Gearman如何正确的在PHP中使用