Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7897657
  • 博文数量: 701
  • 博客积分: 2150
  • 博客等级: 上尉
  • 技术积分: 13233
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:28
个人简介

天行健,君子以自强不息!

文章分类

全部博文(701)

文章存档

2019年(2)

2018年(12)

2017年(76)

2016年(120)

2015年(178)

2014年(129)

2013年(123)

2012年(61)

分类: 架构设计与优化

2016-06-15 21:13:38

一、安装
操作系统:redhat 5.7
1. 安装gearman 
首先,我们需要安装gearmand,在centos和rhel环境下,我们只需运行以下命令:
$ yum install gearmand -y
 
注意:如果不希望通过yum的方式来安装gearmand,可以通过源码编译安装,
具体安装方法可以参考:

安装完毕之后,就可以启动gearmand服务:
$ gearmand -p 4730 -L 10.22.10.90 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -d

附Gearmand(job server的启动参数简单说明)
-b, –backlog=BACKLOG 连接请求队列的最大值
-d, –daemon Daemon 守护进程化
-f, –file-descriptors=FDS 可打开的文件描述符数量
-h, –help
-l, –log-file=FILE Log 日志文件
-L, –listen=ADDRESS 开启监听的地址
-p, –port=PORT 开启监听的端口
-P, –pid-file=FILE File pid file
-r,–protocol=PROTOCOL 使用的协议
-q, –queue-type=QUEUE 持久化队列类型
-t, –threads=THREADS I/O线程数量
-u, –user=USER 进程的有效用户名

libdrizzle Options:
--libdrizzle-host=HOST         Host of server. 
--libdrizzle-port=PORT         Port of server. 
--libdrizzle-uds=UDS           Unix domain socket for server. 
--libdrizzle-user=USER         User name for authentication. 
--libdrizzle-password=PASSWORD Password for authentication. 
--libdrizzle-db=DB             Database to use. 
--libdrizzle-table=TABLE       Table to use. 
--libdrizzle-mysql             Use MySQL protocol.

libmemcached Options:
--libmemcached-servers=SERVER_LIST List of Memcached servers to use.

libsqlite3 Options:
--libsqlite3-db=DB       Database file to use. 
--libsqlite3-table=TABLE Table to use.

libpq Options:
--libpq-conninfo=STRING PostgreSQL connection information string. 
--libpq-table=TABLE     Table to use.

http Options:
--http-port=PORT Port to listen on.

2. 安装python-gearman
gearman的python模块,下载地址为:
我们可以用以下命令安装(两个命令均可,二选一):
$ easy_install gearman

$ pip install gearman

或者也可以通过源码安装:
$ wget --no-check-certificate
$ tar zxvf gearman-2.0.2.tar.gz 
$ cd gearman-2.0.2 
$ python setup.py install
这样,我们就完成了python-gearman的安装。

二、使用示例
下面,列举一个简单的python例子:
首先,我们需要编写一个worker,代码如下:
1.文件名:echoWorker.py
#!/usr/bin/env python 
import os 
import gearman 
import math 
class MyGearmanWorker(gearman.GearmanWorker): 
  def on_job_execute(self, current_job): 
    print "Job started"
    print "===================\n"
    return super(MyGearmanWorker, self).on_job_execute(current_job) 

def task_callback(gearman_worker, gearman_job): 
  print gearman_job.data 
  print "-----------\n"
  return gearman_job.data 

my_worker = MyGearmanWorker(['10.22.10.47:4730']) 
my_worker.register_task("echo", task_callback) 
my_worker.work() 

2.编写client,如下:
文件名:echoClient.py
#!/usr/bin/env python2.7 
from gearman import GearmanClient 
gearman_client = GearmanClient(['192.168.12.34:4730']) 
gearman_request = gearman_client.submit_job('echo', 'test gearman') 
result_data = gearman_request.result 
print result_data 
注意上面GearmanClient(['192.168.12.34:4730'])中的IP地址,需要根据实际启动gearmand服务的IP地址和端口号为准。
 
3.然后,我们运行以下命令:
$ python echoWorker.py
Job started
===================

test gearman
-----------

$ python echoClient.py
test gearman

至此,即可看到输出。

3.总结
Gearman工作在TCP上,默认端口为4730,
client与job server、worker与job server的通信都基于此tcp的socket连接。
client是工作任务的发起者,worker是可以注册处理函数的工作任务执行者,job server为工作的调度者。

协议包含请求报文与响应报文两个部分,所有发向job server的数据包(TCP报文段的数据部分)认为是请求报文,
所有从job server发出的数据包(TCP报文段的数据部分)认为是响应报文。
worker或者client与job server间的通信是基于二进制数据流的,但在管理client也有基于行文本协议的通信。

阅读(2050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~