跨多种环境部署 Gearman
2010-10-09 08:13:21 来源:WEB开发网第一行加载模块,然后您创建一个新的 Worker 对象。job_servers 方法然后注册一个或多个作业服务器,以后客户机会联系这些服务器以请求可用的工作。您已经指定了 IP 地址(也可以使用主机名)和端口号。由于用于 Gearman 的默认端口号改变了,所以这一点特别重要,这会导致系统不能工作的问题。明确地指定端口号可以避免此类问题。您可以指定多个作业服务器,从而具备弹性(不止一个作业服务器意味着存在备用服务器,可以在初始服务器出现故障时派上用场),或者跨不同的服务器组分布具有相同任务的不同工作。
register_function() 方法与脚本中一个名字为任务名的本地函数相关联。任务名将由客户用来请求特定的操作。一个工人可以执行任意数量的任务,更为重要的是,任何工人可以执行不同范围的任务。这使得您可以在已经注册为能够执行该任务的机器支持一个可分布执行的任务。由于是由工人请求其能够执行的任务中的工作,所以不会遇到任务被委派给不能执行该任务的工人的问题。
最后一部分的 work() 方法打开工人,使之可以开始处理请求。本例中的 loop 条件意味着,工人将一直处理请求,直到程序终止。
脚本的其余部分是函数本身。在本例中,您采用客户机提供的输入作为第一个参数(使用 arg() 方法得到它的值),用空格隔开该值,然后返回数组中条目的个数。实际操作比描述起来要稍微麻烦一点。
在客户端,也有一些与此相同的基本步骤。您创建一个 Gearman Client 对象,指定服务器,调用您想要执行的任务。清单 2 展示得比较清楚。
清单 2. 创建一个 Gearman Client 对象
use Gearman::Client;
my $client = Gearman::Client->new;
$client->job_servers('192.168.0.2:4730');
my $result = $client->do_task('wordcount','the quick brown fox jumps over the lazy dog');
print "Words $$result\n";
更多精彩
赞助商链接