gearman管理工具GearmanManager的安装与php使用方法示例


Posted in PHP onFebruary 27, 2020

本文实例讲述了gearman管理工具GearmanManager的安装与php使用方法。分享给大家供大家参考,具体如下:

一、gearman自带了一个gearadmin工具

查看帮助信息

> gearadmin --help

查看状态

> gearadmin --status

查看worker信息

> gearadmin --workers

二、为什么要用GearmanManager

为什么要用GearmanManager来管理我们的worker,因为我们用php编写的worker是要常驻后台运行的。
而且一旦worker过多时,代码更新,难道要一个一个手动重启,显然这是很麻烦的。如果中途出现意外中断或内存泄漏也不好管理。

网上的解决方案一般有如下二种:
1、通过定时任务crontab来定时的重启worker
2、通过php的pcntl扩展,创建多进程来运行worker,主进程监控子进程,如果子进程退出,则重新启动一个子进程来运行worker。

三、使用GearmanManager

GearmanManager下载地址:

https://github.com/brianlmoon/GearmanManager/releases

如:GearmanManager-2.1.0.tar.gz

1、我们创建一个目录用来存放worker的代码

> mkdir -p /data/workers

2、然后我们创建一个sum.php的worker文件,用来处理计算两个数之和。

sum.php代码如下:

<?php
//注意函数名与文件名相同
function sum($job) {
 //workload()获取客户端发送来的序列化数据
 $data = json_decode($job->workload(), true);
 //计算并返回结果
 return $data[0] + $data[1];
}

当然还有面向对象式的代码如下:

<?php
//注意类名与文件名相同
class sum {
 public function run($job) {
  //workload()获取客户端发送来的序列化数据
  $data = json_decode($job->workload(), true);
  //计算并返回结果
  return $data[0] + $data[1];
 }
}

3、解压下载的GearmanManager压缩包

> tar xf GearmanManager-2.1.0.tar.gz
> mv GearmanManager-2.1.0 /data/GearmanManager
> cd /data/GearmanManager

我们只需要关心bin和etc这两个目录,etc目录下提供了三个配置文件

config-advanced.ini 高级配置
config.ini 简单配置
config.php php方式的配置

配置文件说明:

;全局配置
[GearmanManager]
;指定服务器,可添加多个,用逗号分割
host=192.168.1.111:4730,192.168.1.222:4730
;worker文件存放目录,可添加多个,用逗号分割
worker_dir=/data/workers
;要加载的worker,默认所有
include=*
;运行所有worker进程数
count=10
;worker专用进程数,比如总数是10个,有10个worker,每个worker一个进程
dedicated_count=1
;worker最大有效期,单位秒
max_worker_lifetime=3600
;监控worker目录的代码更新,发现代码更新,则杀掉进程,重新加载代码。
auto_update=1
;超时时间
timeout = 300
;当然我们也可以对指定的某个worker进行配置
[sum]
;指定5个进程
dedicated_count=5
;5个进程都只做sum工作
dedicated_only=1

4、我们复制配置文件,并修改成如上所示,并保存

> mv etc/config-advanced.ini etc/GearmanManager.ini

5、运行GearmanManager

> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv

参数说明如下:

-P 管理进程pid文件所在目录,配置文件中通过pid_file来指定
-d 以守护进程形式运行
-u 指定守护进程的用户
-w 指定worker目录,当然配置文件里有配置,这里可以不用
-c 指定配置文件
-l 指定日志存放目录,如果没指定,则输出到标准输出stdout
-h 指定服务器,例如: 192.168.1.111:4730,192.168.1.222:4730
-v 只记录启动与关闭信息
-vv 进程的创建与退出信息
-vvv 关于worker信息和所做工作
-vvvv 调试信息
-vvvvv 所有信息

如果出现/usr/bin/env: php: 没有那个文件或目录,请把php可执行文件加入环境变量

> echo 'export PATH=/data/php56/bin:/data/php56/sbin:$PATH' >> /etc/profile
> source /etc/profile

gearman管理工具GearmanManager的安装与php使用方法示例

gearman管理工具GearmanManager的安装与php使用方法示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
PHP与C#分别格式化文件大小的代码
May 14 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
php自定义函数实现二维数组排序功能
Jul 20 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP获取学生成绩的方法
Nov 17 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 #PHP
php实现根据身份证获取精准年龄
Feb 26 #PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 #PHP
PHP实现创建一个RPC服务操作示例
Feb 23 #PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 #PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 #PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 #PHP
You might like
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
浅谈node的事件机制
2017/10/09 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
Python中为什么要用self探讨
2015/04/14 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
python删除某个字符
2018/03/19 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
解析Python3中的Import
2019/10/13 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
客服服务心得体会
2013/12/30 职场文书
党员一句话承诺大全
2014/03/28 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
红色旅游心得体会
2014/09/03 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
身份证丢失证明
2015/06/19 职场文书