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