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

 

posted @ 2015-08-22 16:17  kl-ky  阅读(710)  评论(0)    收藏  举报
// 侧边栏目录