Gearman 使用小知識

2021-09-19 12:36:07 字數 2084 閱讀 4410

眾所周知,php要實現非同步任務一般都是通過gearmanbeanstalkd等第三方來實現的。目前專案採用的是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...