转:尝试用Gearman实现分布式处理(PHP)
原文来自于http://blog.csdn.net/fdipzone/article/details/7166520
本文需要你已对Gearman有个大致了解。
顺便再推荐两篇参考文章
http://hi.baidu.com/thinkinginlamp/blog/item/ff49972b9e7378f3e6cd40aa.html (学学Gearman)
http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/index.html (用 Gearman 分发 PHP 应用程序的工作负载)
更多参考大家还是自己google吧:)
先安装任务分发的Job端
安装Gearman server and library:
wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
sudo make
sudo make install
中间可能会遇到些问题:
在./configure的时候,可能会出现缺少libraries的情况,一般是缺少libevent和uuid这两个开发包,安装之。。。
sudo apt-get install libevent-dev
sudo apt-get install uuid-dev
安装完成后再重新配置安装,安装完成后执行
sudo ldconfig
因为本试验Client和Worker端都由PHP来实现,所以需要安装php的gearman扩展
安装Gearman PHP extension:
wget http://pecl.php.net/get/gearman-0.4.0.tgz
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
sudo make
sudo make install
中间可能遇到的问题:
找不到phpize命令,phpize在php开发包中,所以要先安装php5-dev
sudo apt-get install php5-dev
安装完后,就可以在源码目录中执行phpize生成相关安装配置信息,接着执行后面的./configure等
make install后,它告诉你一个目录,生成的gearman.so就在那里。
根据需要考到相应PHP的扩展目录里(因为我直接用系统默认安装的php,它自动生成就在扩展中)
接下来修改php.ini以使php加载该模块:
php --ini
看下php.ini在哪里,sudo vim 修改之,在其中加入
extension = "gearman.so"
然后,开始编写client和worker端
client.php
- <?php
- $client= new GearmanClient();
- $client->addServer("127.0.0.1", 4730);
- print $client->do("title", "Linvo");
- print "/n";
- ?>
worker.php
- <?php
- $worker= new GearmanWorker();
- $worker->addServer("127.0.0.1", 4730);
- $worker->addFunction("title", "title_function");
- while ($worker->work());
- function title_function($job)
- {
- $str = $job->workload();
- return strlen($str);
- }
- ?>
准备工作已经完毕,试验开始
1、启动job
gearmand -d
2、启动worker
php -c /etc/php5/apache2/php.ini worker.php
3、启动client(新开终端中打开)
php -c /etc/php5/apache2/php.ini client.php
屏幕显示字符串的长度 “5”
这里,有几点需要说明一下:
1、这里直接用php cli方式运行,添加-c参数是为了加载php.ini配置文件,以加载gearman扩展
2、worker应该做成守护进程(CLI模式),可以开启多个,这样client发起的任务就会分发到各个worker分别来执行(自动负载均衡 )
这个例子由于太过简单,即使开启多个worker也无法看出效果,不过可以通过终止其中一个,可以看出系统自动切换到其他worker继续正常执行
3、同理,client也是可以开启多个的(模型请参考之前的那边日志)
4、同时,job也可以开启多个,以避免单点故障
转:尝试用Gearman实现分布式处理(PHP)的更多相关文章
- 尝试用Gearman实现分布式处理(PHP)[转]
		本文需要你已对Gearman有个大致了解. 顺便再推荐两篇参考文章http://hi.baidu.com/thinkinginlamp/blog/item/ff49972b9e7378f3e6cd40 ... 
- 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
		[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ... 
- 尝试用Uplodify
		尝试用Uplodify Uplodify官方 前台index代码: @{ Layout = null; } <script src="~/Scripts/jquery-1.8. ... 
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
		转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ... 
- 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框
		尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ... 
- [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划
		太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ... 
- 【rt-thread】2、尝试用ENV添加18b20传感器
		尝试用ENV添加18b20传感器 rt-thread能通过env工具添加或者裁剪工程,这里调试的是通过ENV添加18b20传感器. 具体程序实现,可以参考以下资料 https://www.rt-thr ... 
- 尝试用kotlin做一个app(二)
		导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ... 
- 使用 Gearman 实现分布式处理
		因为近来在研究 Mogilefs 的分布文件系统,在读读这个的源码,另外,为公司新设计了一个下载的系统,所以更加要深入研究一下,因为这个好东西是 Perl 写的,真不容易,在读这个的时间发现了几个好东 ... 
随机推荐
- maven profile实现多环境打包
			快速解决: 项目目录 1.pom文件中添加profile <profiles> <profile> <!-- 本地开发环境 --> <id>dev< ... 
- iOS 关于枚举的使用
			枚举值 它是一个整形(int) 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化. 在代码中使用枚举的目的只有一个,那就是增加代码的可读性. 使用: 枚举的定义如下: typed ... 
- .NET 性能分析工具
			Download .NET Profiler http://www.yourkit.com/dotnet/download/ dotTrace 5.5 Performance http://www.j ... 
- Android自动化测试之Monkey工具
			前言:Android自动化测试工具.方法和框架,包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.test tool等. 一. 什么是MonkeyMonk ... 
- Android系统移植与驱动开发--第三章 Git使用入门及在学习中有感
			第三章 Git使用入门 使用Git的目的是减少各种版本的Linux的压缩大小,提供源代码在Linux上进行编译. 在这一个章节中,其实就是关键步骤的操作,虽然Git与我们学习的android没有很大的 ... 
- C#解leetcode 11. Container With Most Water
			Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ... 
- 排名最重要的三个优化阶段分析  --------------------->>转至(卧牛SEO/武汉SEO http://blog.sina.com.cn/zhengkangseo )
			网站排名,不是一两天能够决定的.要想取得好的排名,得分时间分阶段地做排名,网站优化分前期,中期,后期,怎么来区别不同的阶段该用怎样的优化手段.今晚SEO研究中心创始人Moon老师分享:排名最重要的三个 ... 
- html.ex.day01
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- 巧妙的Jq仿QQ游戏导航界面学习
			先贴上源代码 <!doctype html> <html> <head> <meta charset="utf-8"> <ti ... 
- 【转】Objective-C中一种消息处理方法performSelector: withObject:
			原文 : http://www.cnblogs.com/buro79xxd/archive/2012/04/10/2440074.html Objective-C中调用函数的方法是“消息传递”,这 ... 
