一.簡介php
Gearman安裝分2步,第1步是gearmand的安裝,第2步是gearman的PHP擴展的安裝。java
第1步:程序員
二.gearmand的安裝apache
1.首先安裝libdrizzlejson
#yum install libdrizzle libdrizzle-develsocket
2.安裝gearman(兩種方法1.yum2.源碼包)。(c版的server)oop
1)yum安裝測試
#rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpmui
#yum install -y gearmandspa
2)源碼包安裝
#cd /opt/build/
#wget https://launchpad.net/gearmand/trunk/0.34/+download/gearmand-0.34.tar.gz
#tar zxf gearmand-0.34.tar.gz
#cd gearmand-0.34
#./configure
#make && make install
3.啓動gearman服務
1)yum安裝方式
#/etc/init.d/gearmand start
2)源碼包安裝方式
#/opt/build/gearmand-0.34/sbin/gearmand -d
#gearmand -vvv -u root
INFO Starting up
INFO Listening on :::4730 (6)
INFO Creating wakeup pipe
INFO Creating IO thread wakeup pipe
INFO Adding event for listening socket (6)
INFO Adding event for wakeup pipe
INFO Entering main event loop
三.gearman的PHP擴展安裝
1.下載擴展程序:http://pecl.php.net/package/gearman
wget http://pecl.php.net/get/gearman-1.1.2.tgz
tar zxvf gearman-1….
cd gearman-1 …
phpize
./configure
make && make install
很快就安裝完成,最後會展現so文件的路徑,如:/usr/lib64/php/modules/
2.在php.ini末尾加上extension=」/usr/lib64/php/modules/gearman.so」,重啓apache,輸出php –info |grep 「gearman」或者php -m或者網頁輸出phpinfo()都能看到已經安裝成功。
常見問題:configure時若是提示找不到php-config,請指定。如–with-php-config=/usr/local/php/bin/php-config,注意要指定完整,不要只寫目錄。
四.gearman的啓動和測試
1.gearmand -p 4730 -L 121.111.111.111 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -d
2.Client:
$myParams = array();
$myParams['level'] = "warn";
$myParams['content'] = "it's a test";
$client= new GearmanClient();
//若是gearman 300毫秒內沒反應,直接關閉鏈接
$client->setTimeout(300);
$client->addServer("121.111.111.111", "4730");
$client->doBackground("log", json_encode($myParams));
3.Server
$worker = new GearmanWorker();
$worker -> addServer("112.111.111.111", "4730");
$worker -> addFunction("log", "doLog");
while ($worker -> work());
function doLog($job) {
global $logger, $logLevels, $myParams;
$myParams = NULL;
$myParams = json_decode($job -> workload());
$level = $myParams->level;
if (!in_array($level,$logLevels)) $level = 'info';
$logger->$level($myParams->content);
}
本文轉自:程序員鼓勵師