Gearman安装+php邮件推送例子
2013-06-11 14:17
246 查看
Gearman是一个处理分布式过程通信的健壮系统。它提供了一个通用的应用程序框架,主要用来把任务转发给
到其他机器或进程。使用Gearman 能让程序实现并行工作、负载均衡和跨语言调用。它能够用于不同类型
的应用程序,从高可用的web站点到数据库复制传输,下面是Gearman的一些 优势。
开源 - 免费
多语言支持 - 支持多种语言,而且会越来越多,也实现在客户端用A语言提交任务,Worker端用B语言进行处理。
灵活 - 不用受制于特定的模式,可以快速实现应用的集成。
快速 - Gearman协议简单,并且有经过优化的C语言实现的Server,可以最小化应用程序的开销。
可内嵌 - 由于Gearman 快速且轻量,所以适用于于各种规模的程序,可以以最小的代价引入已经存在的应用程序。
没有单点失败 - Gearman不仅带来伸缩性,也带来更好的容错性。
在ubuntu下搭建gearman步骤如下:
1:下载gearman安装包,最新版本的编译失败,要升级一些依赖包,这里测试玩玩 所以安装个低点地版
本: wget http://launchpad.net/gearmand/trunk/0.13/+download/gearmand-0.13.tar.gz
2:安装依赖包 apt-get install uuid-dev libevent-dev
3:编译安装gearmand
5:添加模块
tcp6 0 0 :::4730 :::* LISTEN 8108/gearmand
安装时常见的问题有:
1.configure:error:no acceptable C compiler found in $PATH
解决:sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc
2.configure:error:No working C++ Compiler has been found.gearmand requires a C+
解决:sudo apt-get install gcc build-essential g++ rpm
3.configure:error:cannot find Boost headers version >=1.37.0
解决:sudo wget http://connie.slackware.com/~alien/slackbuilds/boost/build/boost_1_38_0.tar.bz2
sudo tar -xjvf boost_1_38_0.tar.bz2
sudo make
sudo make install
4.configure:error:libevent is required for gearmand.On Debian this can be found in libevent-dev.On RedHat this can be found in libevent-devel.
解决::sudo apt-get install libevent-dev
5.configure:error:Couldn't find uuid/uuid.h.On Debian this can be found in uuid-dev.On Redhat this can be found in e2fsprogs-devel.
解决: sudo apt-get install uuid-dev
下面是一个PHP实例具体API和更多例子可以在PHP手册上gearmanAPI找到(PHP手册上例子真的很详细,
本来还想玩玩C的API来试着写下服务端,无奈官网上C的API部分没有work部分的例子,只有安装包中有个
example结果还编译失败):
模拟做一个邮件推送
client.php:
view source
print?
worker.php:
view source
print?
然后运行worker,和client:
php -c /etc/php5/apache2/php.ini /var/www/worker.php #要加载配置执行否则命令模式下没有加载拓展
php -c /etc/php5/apache2/php.ini /var/www/client.php
运行结果如下:
这样就可以将一些费资源比如图片转换,发邮件等的操作放到另一台服务器上,通过gearman实现分布式。
一些资料:http://php.net/manual/en/book.gearman.php
http://www.ibm.com/developerworks/cn/opensource/os-gearman/index.html
http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/
http://gearman.org
到其他机器或进程。使用Gearman 能让程序实现并行工作、负载均衡和跨语言调用。它能够用于不同类型
的应用程序,从高可用的web站点到数据库复制传输,下面是Gearman的一些 优势。
开源 - 免费
多语言支持 - 支持多种语言,而且会越来越多,也实现在客户端用A语言提交任务,Worker端用B语言进行处理。
灵活 - 不用受制于特定的模式,可以快速实现应用的集成。
快速 - Gearman协议简单,并且有经过优化的C语言实现的Server,可以最小化应用程序的开销。
可内嵌 - 由于Gearman 快速且轻量,所以适用于于各种规模的程序,可以以最小的代价引入已经存在的应用程序。
没有单点失败 - Gearman不仅带来伸缩性,也带来更好的容错性。
在ubuntu下搭建gearman步骤如下:
1:下载gearman安装包,最新版本的编译失败,要升级一些依赖包,这里测试玩玩 所以安装个低点地版
本: wget http://launchpad.net/gearmand/trunk/0.13/+download/gearmand-0.13.tar.gz
2:安装依赖包 apt-get install uuid-dev libevent-dev
3:编译安装gearmand
tar xvzf gearmand-0.13.tar.gz cd gearmand-0.13 ./configure make make install 4:安装gearman php扩展,pecl install gearman-0.7.0
5:添加模块
vi /etc/php5/apache2/php.ini extension =gearman.so 然后在phpinfo中验证是否加载。 6:启动gearmand job server守护程序
/usr/local/sbin/gearmand -d -u nobody 7:查看进程是否开启,netstat -antup|grep gearmand
tcp6 0 0 :::4730 :::* LISTEN 8108/gearmand
安装时常见的问题有:
1.configure:error:no acceptable C compiler found in $PATH
解决:sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc
2.configure:error:No working C++ Compiler has been found.gearmand requires a C+
解决:sudo apt-get install gcc build-essential g++ rpm
3.configure:error:cannot find Boost headers version >=1.37.0
解决:sudo wget http://connie.slackware.com/~alien/slackbuilds/boost/build/boost_1_38_0.tar.bz2
sudo tar -xjvf boost_1_38_0.tar.bz2
sudo make
sudo make install
4.configure:error:libevent is required for gearmand.On Debian this can be found in libevent-dev.On RedHat this can be found in libevent-devel.
解决::sudo apt-get install libevent-dev
5.configure:error:Couldn't find uuid/uuid.h.On Debian this can be found in uuid-dev.On Redhat this can be found in e2fsprogs-devel.
解决: sudo apt-get install uuid-dev
下面是一个PHP实例具体API和更多例子可以在PHP手册上gearmanAPI找到(PHP手册上例子真的很详细,
本来还想玩玩C的API来试着写下服务端,无奈官网上C的API部分没有work部分的例子,只有安装包中有个
example结果还编译失败):
模拟做一个邮件推送
client.php:
view source
print?
01 | <?php |
02 | #create our client object. |
03 | $gmclient = new GearmanClient(); |
04 |
05 | # Add default server (localhost). |
06 | $gmclient ->addServer( "127.0.0.1" ,4730);#这里是通知一个worker来处理任务,worker可以在不同的地方,实现分布式和负载均衡。 |
07 |
08 | echo "Begin to Send mail\n" ; |
09 | = array ( |
10 | 'username' => 'cyrec' , |
11 | 'mailto' => 'i@cyrec.org' , |
12 | 'text' => 'this is a test' |
13 | );#当然邮件的内容可以通过post到这个脚本来获取。 |
14 | # Send mail |
15 | do |
16 | { |
17 | $result = $gmclient -> do ( "SendMail" ,serialize( ));#因为gearman协议只支持字符串地参数传递,所以如果是数组或者其他类型的参数要序列化传参。 |
18 |
19 | # Check for various return packets and errors. |
20 | #这下面是官方例子中的一段,主要是可以通过接受返回地状态码来执行相应地逻辑 |
21 | switch ( $gmclient ->returnCode()) |
22 | { |
23 | case GEARMAN_WORK_DATA: |
24 | echo "Data:$result\n" ; |
25 | break ; |
26 | case GEARMAN_WORK_STATUS: |
27 | list( $numerator , $denominator )= $gmclient ->doStatus(); |
28 | echo "Status:$numerator/$denominator complete\n" ; |
29 | break ; |
30 | case GEARMAN_WORK_FAIL: |
31 | echo "Failed\n" ; |
32 | exit ; |
33 | case GEARMAN_SUCCESS: |
34 | echo "Mail Send Success!" ; |
35 | break ; |
36 | default : |
37 | echo "RET:" . $gmclient ->returnCode(). "\n" ; |
38 | exit ; |
39 | } |
40 | } |
41 | while ( $gmclient ->returnCode()!=GEARMAN_SUCCESS); |
42 | ?> |
view source
print?
01 | <?php |
02 | echo "Starting\n" ; |
03 | # Create our worker object. |
04 | $gmworker = new GearmanWorker(); |
05 | # Add default server (localhost). |
06 | $gmworker ->addServer( "127.0.0.1" ,4730);#这里可以添加多个服务端,比如在不同的地方有同样的服务,gearman会自动选择空间的worker来作业。 |
07 | $gmworker ->addServer( "127.0.0.2" ,4730); |
08 |
09 | # Register function "reverse" with the server. |
10 | $gmworker ->addFunction( "SendMail" , "SendMail" ); |
11 |
12 | "Waiting for job...\n" ; |
13 | while ( $gmworker ->work())#worker开始永不停止(除非手动ctrl+c)的接受client的任务 |
14 | { |
15 | if ( $gmworker ->returnCode()!=GEARMAN_SUCCESS) |
16 | { |
17 | echo "return_code:" . $gmworker ->returnCode(). "\n" ; |
18 | break ; |
19 | } |
20 | } |
21 |
22 | function SendMail( $job ) |
23 | { |
24 | =unserialize( $job ->workload()); |
25 | print_r( ); |
26 | #接下来就是用phpmailer来发送邮件内容。虚拟机下没有这个类就不写了,大概逻辑就这样。 |
27 | } |
28 | ?> |
php -c /etc/php5/apache2/php.ini /var/www/worker.php #要加载配置执行否则命令模式下没有加载拓展
php -c /etc/php5/apache2/php.ini /var/www/client.php
运行结果如下:
这样就可以将一些费资源比如图片转换,发邮件等的操作放到另一台服务器上,通过gearman实现分布式。
一些资料:http://php.net/manual/en/book.gearman.php
http://www.ibm.com/developerworks/cn/opensource/os-gearman/index.html
http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/
http://gearman.org
相关日志:
相关文章推荐
- 解析php中用PHPMailer来发送邮件的示例(126.com的例子)
- 使用phpmaill发送邮件的例子
- phpmailer使用163邮件发送邮件例子
- php中用PHPMailer来发送邮件的示例(126.com的例子)
- 使用phpmaill发送邮件的例子
- BlackBerry BES推送例子代码(php)
- PHP使用PHPMailer实现发送邮件
- java发邮件例子
- 用一个例子学习PHP的选择和循环
- PHP不用递归实现无限分级的例子分享
- 用PHP实现POP3邮件的收取(转载)
- 以前见到的PHP邮件功能,不错还是不错的。
- php用PHPExcel库生成Excel文档的例子
- php smtp邮件发送的标题乱码等一系列问题
- php 文件读取和写入详细介绍例子
- php邮件群发
- thinkphp集成系列之phpmailer批量发送邮件
- IOS 推送消息 php做推送服务端
- php 邮件发送