怎样使用 Gearman?

一个简单的gearman的体系包括三个部分,一个client,一个worker,一个job

server,client负责创建并发起一个job请求,job

server负责找到合适的worker,worker当然就是负责执行job,事实上是worker完成了实际的任务。gearman提供一个api从

而你的client与worker能够与job

server通信。我们来看一个简单的gearman应用实例。这一实例只完成一个功能,将一串字符串reverse。

首先我们要写一个client,

“reverse_client”,代码实际上就是负责发起job请求,并返回结果。代码实际上就是连接job server,并发起一个请求

reverse函数,代码部分如下:

gearman_client_create(&client);

gearman_client_add_server(&client, "127.0.0.1", 0);

result= gearman_client_do(&client, "reverse", "Hello world!",

strlen("Hello world!"), &result_size, &ret);

这段代码首先初始化一个client实例,配置并连接一个本地的job server ,然后发起了一个reverse的请求,参数是

"Hello world!"函数名称与参数,这些与gearman的要求一致。现在gearman的将这个请求数据打包发给job

server,job server会自动寻找合适的worker来执行。

让我们来看看worker的代码:

void *reverse_function(gearman_job_st *job, void *cb_arg,

size_t *result_size, gearman_return_t *ret_ptr)

{

const uint8_t *workload;

uint8_t *result;

size_t x;

size_t y;

workload= gearman_job_workload(job);

*result_size= gearman_job_workload_size(job);

result= malloc(*result_size);

for (y= 0, x= *result_size; x; x--, y++)

result[y]= workload[x - 1];

*ret_ptr= GEARMAN_SUCCESS;

return result;

}

gearman_worker_create(&worker);

gearman_worker_add_server(&worker, "127.0.0.1", 0);

gearman_worker_add_function(&worker, "reverse", 0, reverse_function, NULL);

while (1)

gearman_worker_work(&worker);

这段代码定义了一个函数 “reverse_function”

,这个函数接收一个字符串,然后反向这个字符串的顺序,并且用一个worker的实例向job

server注册了一个reverse函数。

当job

server收到请求reverse的时候,就会传递相关的数据给这个worker,worker会执行reverse_functio,将执行结果返回job

server,最后传递给初始请求者。

实际上client与worker提供了job管理系统的交互与管理的大部分工作,你需要做的不过是完成client与worker的部分代码。在这一版本的examples目录下,提供了以上这个例子。

gearman都能用来干什么?

gearman可以用在各个方面,最简单就是在不同语言之间架起一座桥梁。比如你可能希望你的php程序调用一个c

函数,那么用gearman就可以实现了,当然了实际你可以通过写一个php扩展来实现同样的工作,但是比如你要php调用java,perl,或者

python那么,gearman就非常棒了。

gearman另一个应用方面是负载分担,你可以将worker放在不同的服务器(或者一些列服务器)上,比如你的php程序需要图片转换,但是不

希望本地服务器有太多的这样图片转换的进程,那么你可以建立一系列服务器,在上面加载worker处理图片转换。这样你的web服务器将不受图片转换的影

响,同时你得到了负载均衡的功能,因为job

server会在请求到来的时候,将这个请求发给空闲的worker.同样对于多核的服务器,你可以在同一机器上创建同样数目的worker. 你可能担

心,job server处于一个中心,那么这会是一个单点的瓶颈,如果死了,会怎么样?对于这样的情况,你可以运行多个job

server。这样如果一个job server down了,client和worker会自动迁移到另一台job

server上。

gearman c语言,Gearman使用介绍 c语言0.2版本相关推荐

  1. 从Java到ObjC语言的桥梁:谷歌J2ObjC 0.7版本亮相

    http://www.csdn.net/article/2013-04-11/2814856-j2objc-0-7-version-released

  2. gearman c语言,Gearman分布式任务处理系统(一)基本介绍

    Gearman介绍 Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统. 通常,多语言多系统之间 ...

  3. 智能合约语言Solidity 类型介绍

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约语言Solidity 类型介绍11 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合 ...

  4. c语言位段sizeof,C语言位段的介绍

    C语言位段的介绍 位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间.含有位段的结构体(联合体)称为位段结构.采用位段结构既能够节省空间,又方便于操作.下面,就和小编 ...

  5. Dart语言精简入门介绍

    Dart语言精简入门介绍 1.介绍 Dart 在设计时应该是同时借鉴了 Java 和 JavaScript和kotlin 面向对象 JIT&AOT:JIT(Just in Time)优点:即时 ...

  6. python位运算符_详细介绍Python语言中的按位运算符

    按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 按位与 ( bitwise and of x and y ) & 举例: 5&3 = 1 解释: 101 ...

  7. 上周并发题的解题思路以及介绍Go语言调度器

    上周的文章<Go并发编程里的数据竞争以及解决之道>最后留下了一个用并发解决的思考题,期间有几位同学留言说了自己的实现思路,也有两位直接私信发代码让我看的,非常感谢几位的积极参与.今天的文章 ...

  8. C++语言string类介绍和示例

    在C语言中,用0结尾的字符数组表示字符串,C的字符串有一个问题,就是定义后大小不能改变,存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这个问题让程序员很郁闷. C++的strin ...

  9. html语言汇总,第三讲HTML语言全面介绍汇总.ppt

    第三讲HTML语言全面介绍汇总,c语言语句汇总,2016网络语言汇总,r语言对数据分类汇总,c语言面试题大汇总,r语言分类汇总,励志语言汇总,编程语言汇总,c语言简答题目汇总,r语言分组汇总 授课主要 ...

  10. 【软件开发】Java语言的简单介绍

    Java语言的简单介绍 一.Java语言的介绍 二.Java的版本 三.JDK的介绍 四.Java API文档 五.Java语言的特点 1. 面向对象 2. 解释性 3. 多线程 4. 可移植性 / ...

最新文章

  1. esp32cam与下载板的实际有效接线图
  2. final 字符常量——确定一个值后该值无法改动,使变量变字符常量
  3. 母板页中的图片路径及页面链接路径设置
  4. Smaug Coverage
  5. plc采用计算机结构如何理解,PLC的基本结构
  6. 三个变量存在一个协整方程_存在多个协整关系,如何取舍?
  7. 脉脉因“App 整改下架”事件致歉;阿里云全年营收超 600 亿;腾讯防大量群消息骚扰专利获授权|极客头条...
  8. hdu 5437 Alisha’s Party 优先队列
  9. python自动办公pdf_python自动化办公之 Python 解析 PDF
  10. 怎么样去图片水印?用这三招快速消除水印
  11. android 音量流类型,android 音量控制setVolumeControlStream
  12. npm run build 报错: No such file or directory
  13. 五线制交流道岔控制电路故障的处理方法
  14. 从faces_glintasia的.rec数据集转换为jpg图片
  15. 搭建无广告免费小说网站------简述(一)
  16. IDEA 隐藏窗口标题栏(去掉 Win10 白色标题栏)
  17. 1.C语言变量类型、全局变量、局部变量
  18. 电脑之间快速传输超大文件(100GB以上)的方法
  19. 三国皇帝的寡妇秘史(1)
  20. 开源ERP Tryton 的用户权限管理

热门文章

  1. 把数字翻译成字符串/斐波那契数列/青蛙跳台阶
  2. IO流--文件切割合并对象的序列化
  3. Java对象数组与JSON相互转换
  4. JS异步获取数据的几个方法
  5. 图像上的算术运算(2)——阈值、掩膜
  6. 目前好用的VUE前端框架开源项目分享
  7. 如何在Camtasia中对录制视频进行字幕编辑
  8. 第10章第25节:使用Paper Cut Art Generator创建剪纸艺术图像 [PowerPoint精美幻灯片实战教程]
  9. 使用超声波模块做小车跟随
  10. 海子的《面朝大海,春暖花开》