1. 启动
$ gearmand --log-file gearmand.log --listen 127.0.0.1 --port=4730 --verbose=INFO&
[1] 20996
启动成功会看到生成一个如下格式的结果
[数量编号] 进程编号
可能会报错 没有 gearmand.log 可以根据具体的报错目录创建相应的文件及目录
需要根据报错的具体目录进行创建和授权
mkdir -p /usr/local/var/log/
cd /usr/local/var/log/
touch gearmand.log
cd /usr/local
chmod -R 777 ./var
2. 运行worker
worker.php
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("job" ,"job_function");
while ($worker->work());
function job_function($job){
echo $job->workload();
return strlen(strtolower($job->workload()));
}
?>
执行
php worker.php
3. 运行client
client.php 使用addTask 和 runTasks 方法配合
<?php
$client = new GearmanClient(); //创建一个客户端
$client->addServer('127.0.0.1', 4730); //添加一个job服务
//设置任务完成时的回调函数
$client->setCompleteCallback(function($task) {
echo $task->data(), "\n"; //获取由worker返回的数据
});
//计算1到500的累加和
//添加五个任务到队列
$client->addTask('job', json_encode(array(1, 100)));
$client->addTask('job', json_encode(array(100, 200)));
$client->addTask('job', json_encode(array(200, 300)));
$client->addTask('job', json_encode(array(300, 400)));
$client->addTask('job', json_encode(array(400, 500)));
//运行队列中的任务,do系列不需要runTask()
$client->runTasks();
?>
或者 直接使用 do 方法
<?php
$client = new GearmanClient(); //创建一个客户端
$client->addServer('127.0.0.1', 4730); //添加一个job服务
$client->do('job','hello');
?>
执行
php client.php
然后客户端的任务就被执行了
4. 关闭gearmand服务
kill -9 启动时的进程号
# 什么 你不知道进程号? 试试下面的命令
lsof -i:4730