眾所周知,php要實現非同步任務一般都是通過gearman
beanstalkd
等第三方來實現的。目前專案採用的是gearman
來實現非同步任務。
通俗的來說
gearman是乙個分發任務的程式框架,使用gearman的應用通常有三部分組成:乙個client、乙個worker、乙個 任務伺服器。 client的作用是提出乙個 job 任務 交給 job server 任務伺服器。job server 會去尋找乙個 合適的 worker 來完成這項任務。gearman官方**位址 gearman官網
關於gearman 安裝和使用 請參考 gearman安裝和使用
gearman
請求過程中 涉及的三個client -> job -> worker
。
client 請求的發起者,可以是c,php,perl,mysql udf等等。
job:請求的排程者,用來負責協調把client發出的請求**給合適的work。
worker:請求的處理者,可以是c,php,perl等等。
在這個過程中work
要長駐後台時刻準備著被jobserver
呼叫來處理job
,所以worker
不能死掉
client.php
<?php
$client= new gearmanclient();
$client->addserver('127.0.0.1', 4730);
$client->dobackground('say','hello world');
work.php
<?php
$worker= new gearmanworker();
$worker->addserver("127.0.0.1", 4730);
$worker->addfunction("say", "hello");
while ($worker->work());
function hello ()
以上即是php
呼叫gearman
簡單的示例。
在我們實際的開發過程中,一般會採用框架進行專案的開發,如果採用以上方式進行呼叫,肯定會破壞專案原有的檔案結構。 以下以thinkphp 3.2
版本進行demo演示
,呼叫方式跟單檔案呼叫沒什麼區別,區別在於work
的編寫。
因為work
需要長駐後台執行,所以我們要宣告檔案以cli
模式執行。即:
方式一:
<?php
namespace sys\controller;
use think\controller;
class democontroller extends controller
}protected function add_work ($job,$func)
public function test ()
static public function say ($job)
}
方式二:
<?php
namespace sys\controller;
use think\controller;
class democontroller extends controller
}protected function add_work ($job,$func)
public function test ()
}function say ($job)
新增work
到後台 格式為/var/www/index.php sys/demo/test
Gearman安裝及使用
基礎安裝包 yum install vim wget gcc gcc c make dos2unix gperf libevent libevent devel zlib devel bzip2 devel openssl devel ncurses devel boost boost devel ...
Layui使用小知識
重置表單 表單的完整重置 資料 樣式 function reset form ele 後端controller層進行資料校驗 判斷使用者名稱是否合法 string regx a z0 9 if empname.matches regx 獲取表單中的資料 data empaddmodal form s...
php使用gearman進行任務分發操作例項詳解
一 安裝gearman gearman原始碼包 如 gearmand 1.1.12.tar.gz php的gearman擴充套件包 如 gearman 1.1.2.tgz 安裝gearman yum install boost devel gperf libevent devel libuuid d...