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 相关文章推荐
discuz安全提问算法
Jun 06 PHP
php获取目标函数执行时间示例
Mar 04 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
Mar 07 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
php上传后台无法收到数据解决方法
Oct 28 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获取地址栏信息的代码
2008/10/08 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
php生成rss类用法实例
2015/04/14 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
python 中random模块的常用方法总结
2017/07/08 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
python判断是空的实例分享
2020/07/06 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
如何利用React实现图片识别App
2022/02/18 Javascript