Awesome
#Codeigniter Gearman Library
This is a library to use gearman within codeigniter. The original source was pulled from Sunil here https://github.com/sunils34/codeigniter-gearman-library. I add some feature and remove deprecated function.
Please make sure you have setuped gearman daemon environment and gearman pecl drivers. (http://pecl.php.net/package/gearman).
##Set up gearman environment
For Ubuntu/Debian OS (apt-get install):
install gearman server
$ aptitude -y install gearman gearman-job-server libgearman-dev libdrizzle0
install gearman extension
$ pecl install channel://pecl.php.net/gearman-1.1.2
Installation
You can install via http://getsparks.org/packages/codeigniter-gearman/show
$ php tools/spark install -v1.0.2 codeigniter-gearman
or manual install
$ cp config/gearman.php your_application/config/
$ cp libraries/lib_gearman.php your_application/libraries/
Usage
load library from spark:
$this->load->spark('codeigniter-gearman/1.0.2');
or load library from manual install:
$this->load->library('lib_gearman');
Client Example
Please refer: example/cli.php
public function client()
{
$this->lib_gearman->gearman_client();
$emailData = array(
'name' => 'web',
'email' => 'member@example.com',
);
$imageData = array(
'image' => '/var/www/pub/image/test.png',
);
$this->lib_gearman->do_job_background('sendEmail', serialize($emailData));
echo "Email sending is done.\n";
$this->lib_gearman->do_job_background('resizeImage', serialize($imageData));
echo "Image resizing is done.\n";
}
Worker example
public function worker()
{
$worker = $this->lib_gearman->gearman_worker();
$this->lib_gearman->add_worker_function('sendEmail', 'Cli::doSendEmail');
$this->lib_gearman->add_worker_function('resizeImage', 'Cli::doResizeImage');
while ($this->lib_gearman->work()) {
if (!$worker->returnCode()) {
echo "worker done successfully \n";
}
if ($worker->returnCode() != GEARMAN_SUCCESS) {
echo "return_code: " . $this->lib_gearman->current('worker')->returnCode() . "\n";
break;
}
}
}
Define job function
public static function doSendEmail($job)
{
$data = unserialize($job->workload());
print_r($data);
sleep(2);
echo "Email sending is done really.\n\n";
}
public static function doResizeImage($job)
{
$data = unserialize($job->workload());
print_r($data);
sleep(2);
echo "Image resizing is really done.\n\n";
}
Run Test
run worker:
$ php app/index.php cli worker
run client:
$ php app/index.php cli client
$ php app/index.php cli client
$ php app/index.php cli client
....