摘要:目前項目采用的是來實現(xiàn)異步任務。關于介紹通俗的來說是一個分發(fā)任務的程序框架使用的應用通常有三部分組成一個一個一個任務服務器。的作用是提出一個任務交給任務服務器。請求的調度者,用來負責協(xié)調把發(fā)出的請求轉發(fā)給合適的。
眾所周知,PHP要實現(xiàn)異步任務一般都是通過 Gearman Beanstalkd 等第三方來實現(xiàn)的。目前項目采用的是 Gearman 來實現(xiàn)異步任務。
關于Gearman介紹通俗的來說
Gearman是一個分發(fā)任務的程序框架,使用Gearman的應用通常有三部分組成:一個Client、一個Worker、一個 任務服務器。 Client的作用是提出一個 Job 任務 交給 Job Server 任務服務器。Job Server 會去尋找一個 合適的 Worker 來完成這項任務。
Gearman官方網(wǎng)站地址 Gearman官網(wǎng)
關于Gearman 安裝和使用 請參考 Gearman安裝和使用
PHP使用GearmanGearman 請求過程中 涉及的三個 Client -> Job -> Worker。
Client 請求的發(fā)起者,可以是C,PHP,Perl,MySQL UDF等等。 Job:請求的調度者,用來負責協(xié)調把Client發(fā)出的請求轉發(fā)給合適的Work。 Worker:請求的處理者,可以是C,PHP,Perl等等。
在這個過程中 work要長駐后臺時刻準備著被jobserver調用來處理job,所以worker不能死掉
PHP使用Gream實例(多帶帶函數(shù)實現(xiàn))client.php
addServer("127.0.0.1", 4730); $client->doBackground("say","hello world");
work.php
addServer("127.0.0.1", 4730); $worker->addFunction("say", "hello"); while ($worker->work()); function hello () { //DO SOMETHING... }
以上即是 PHP 調用 Gearman 簡單的示例。
在我們實際的開發(fā)過程中,一般會采用框架進行項目的開發(fā),如果采用以上方式進行調用,肯定會破壞項目原有的文件結構。 以下以ThinkPHP 3.2 版本進行DEMO演示,調用方式跟單文件調用沒什么區(qū)別,區(qū)別在于 work的編寫。
因為 work需要長駐后臺運行,所以我們要聲明文件以 CLI 模式運行。即:
方式一:
"XXXX", "port" => "XXX" ); public function __construct () { $sapi = php_sapi_name(); if ($sapi != "cli") { exit(); } } protected function add_work ($job,$func) { $worker= new GearmanWorker(); $worker->addServer($this->$_config["host"], $this->$_config["port"]); $worker->addFunction($job, $func); while ($worker->work()); } public function test () { $this->add_work("say","SysControllerDemoController ::say"); } static public function say ($job) { $data = $job->workload(); //DO SOMETHING... } }
方式二:
"XXXX", "port" => "XXX" ); public function __construct () { $sapi = php_sapi_name(); if ($sapi != "cli") { exit(); } } protected function add_work ($job,$func) { $worker= new GearmanWorker(); $worker->addServer($this->$_config["host"], $this->$_config["port"]); $worker->addFunction($job, $func); while ($worker->work()); } public function test () { $this->add_work("say","SysControllersay"); } } function say ($job) { $data = $job->workload(); //DO SOMETHING..... }
添加work到后臺 格式為 /var/www/index.php Sys/Demo/test
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/21098.html
摘要:啟動和如下信息則表示成功查看版本安裝擴展從下載最新擴展需下載最新源碼包,并解壓縮安裝安裝成功后信息然后,配置文件增加內容重啟后,出現(xiàn)如下信息則表示安裝擴展成功。 首發(fā)于 樊浩柏科學院 Gearman 是一個分布式任務分發(fā)系統(tǒng),通過程序調用(API,跨語言)分布式地把工作委派給更適合做某項工作的機器,且這些機器可以以并發(fā)的、負載均衡的形式來共同完成某項工作。當計算密集型場景時,適合在后...
摘要:但是這需要對文件以及有非常深入的理解,同時由于存在多種形式,分析實現(xiàn)同步的工作量是非常大的。因此這里選擇了一種開發(fā)成本更加低廉的方式,借用已經(jīng)比較成熟的,將數(shù)據(jù)首先放入中,然后通過一個自己編寫的,將數(shù)據(jù)同步到。此類連接遠程的。 MySQL到Redis數(shù)據(jù)復制方案 無論MySQL還是Redis,自身都帶有數(shù)據(jù)同步的機制,像比較常用的 MySQL的Master/Slave模式 ,就是由Sl...
摘要:異步操作廢話不說直接進入正題應用場景業(yè)務邏輯中經(jīng)常會出現(xiàn)發(fā)送信息發(fā)送郵件記錄日志等等這個時候用異步再好不過了用戶直接的體驗就是使用的賊流暢使用技術這個不僅僅支持了其他語言也支持有的擴展用起來更方便感覺上異步隊列不同點有個隊列專門用來存儲發(fā)送 PHP異步操作 廢話不說直接進入正題: 應用場景: 業(yè)務邏輯中經(jīng)常會出現(xiàn)發(fā)送信息,發(fā)送郵件,記錄日志等等,這個時候用異步再好不過...
摘要:文件分發(fā)針對用戶上傳的文件,進行多臺服務器分發(fā)。系統(tǒng)報警當系統(tǒng)出現(xiàn)問題的時候,第一時間通知相關人。這篇文章主要講解系統(tǒng)報警場景在開發(fā)系統(tǒng)的過程中,往往程序會出現(xiàn)這樣,那樣的問題。所以,使用實現(xiàn)短信,郵件的異步發(fā)送。也可以用來實現(xiàn)上面的需求。 Gearman 是什么? Gearman是一個用來把工作委派給其他機器、分布式的調用更適合做某項工作的機器、并發(fā)的做某項工作在多個調用間做負載均衡...
閱讀 2409·2021-11-23 09:51
閱讀 1220·2021-11-22 13:54
閱讀 3432·2021-09-24 10:31
閱讀 1099·2021-08-16 10:46
閱讀 3632·2019-08-30 15:54
閱讀 713·2019-08-30 15:54
閱讀 2896·2019-08-29 17:17
閱讀 3172·2019-08-29 15:08