gearman官网文档(入门手册)
一、前言
看到官网的时候,觉得这篇文章比较基础,也比较实用,就决定做一下翻译,作为参考资料。
二、开始使用gearman
这篇文档旨在为使用gearman基础功能而提供足够多的信息和实例,以便快速入门gearman。这篇文档是建立在对sever、clients和workers有较好理解的基础上进行的,如果还不清楚这些概念,我会在后续博客中继续介绍。
三、job server
gearman一般支持3种语言编写server,这篇文章是基于C语言编写的job server,因为C编写的目前效率最好的,同样也提供了4种C server安装模式。
四、安装过程参考我另外一篇博客
五、启动gearman
job server安装完成后,可以使用如下命令启动:
gearmand -d
-d参数让server在后台启动,如果想启动调试模式的话,可以使用-v或者多个v如-vvv参数。
$ gearmand -vvv INFO Starting up INFO Listening on :::4730 (6) INFO Creating wakeup pipe INFO Creating IO thread wakeup pipe INFO Adding event for listening socket (6) INFO Adding event for wakeup pipe INFO Entering main event loop
六:client和worker
如果安装server后就可以选择启动不同语言编写的client和worker,具体启动参数这里不做介绍。
1、gearman命令行模式
命令行模式是安装c语言server自带的模式,提供完整的client和worker接口。具体参数可以使用gearman -H显示参考。
启动woker:
-w参数告诉gearman以worker方式启动,如:
$ gearman -w -f wc -- wc -l
启动一个worker,这个连接默认本地的server。这个命令告诉gearman注册了wc的函数(-f参数是声明参数)。当每个server与worker会话的时候,gearman会主进程派生出一个子进程来执行wc -l的指令,gearman将从server载入输入,处理后并进行输出。如果gearman接受的指令没有执行结束,可以使用CTRL+C来杀死gearman进程。
启动client:
如果没有-w参数,启动的gearman为client。默认情况下,client前景显示执行并等待结果返回。不过也可以使用-b参数,让client在后台执行。
$ gearman -f wc < /etc/passwd 26
这条命令将前景执行client,提交会话给默认的localhost的server,并执行wc函数。client将加载/etc/passwd文件内容给server,并把server返回的结果26显示出来。这个过程等同执行如下命令:
$ wc -l < /etc/passwd
虽然gearman的server、client和worker可以在不同服务器上运行。但是命令行模式对原型开始设计、写不同服务器的管理工具和推送脚本到别的服务器上是非常有用的,比如日志分析等。
2、gearman的php扩展
php扩展是C语言写的,包含client和worker的接口。同时php的扩展也兼容原生接口,说白了,就是php的worker可以使用别的语言编写的client处理。
扩展安装pecl上下载安装。
Worker
woker实例:
<?php
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("reverse", "my_reverse_function");
while ($worker->work());
function my_reverse_function($job)
{
return strrev($job->workload());
}
?>
php命令运行,或者web方式可以启动一个worker,这里解释一下:默认server为localhost,注册的函数reverse,回调函数为my_reverse_function。
启动命令:
$ php worker.php
可以使用CTRL+C结束进程。
Client
实例:
<?php
$client= new GearmanClient();
$client->addServer();
print $client->do("reverse", "Hello World!");
?>
执行:
$ php client.php !dlroW olleH
下面是一个应用实例:
图片大小重定义:
<?php
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("resize", "my_resize_function");
while ($worker->work());
function my_resize_function($job)
{
$thumb = new Imagick();
$thumb->readImageBlob($job->workload());
if ($thumb->getImageHeight() > 600)
$thumb->scaleImage(0, 600);
else if ($thumb->getImageWidth() > 800)
$thumb->scaleImage(800, 0);
return $thumb->getImageBlob();
}
?>
resize的client:
下面是使用命令行进行的:
$ gearman -f resize < full.jpg > thumb.jpg $ ls -l full.jpg thumb.jpg -rw-r--r-- 1 eday eday 3220493 2009-06-24 12:14 full.jpg -rw-r--r-- 1 eday eday 328421 2009-06-24 12:21 thumb.jpg

浙公网安备 33010602011771号