|
本文所述php框架Swoole定時(shí)器Timer特性分析具有很好的實(shí)用價(jià)值,值得php程序開發(fā)人員學(xué)習(xí)借鑒。具體分析如下:
首先,在各種業(yè)務(wù)型系統(tǒng)中,往往需要服務(wù)器在后臺(tái)掃描相關(guān)數(shù)據(jù),觸發(fā)相應(yīng)的統(tǒng)計(jì)、通知等操作。
比如對(duì)于一個(gè)項(xiàng)目管理系統(tǒng),需要每天的特定時(shí)間內(nèi),統(tǒng)計(jì)每項(xiàng)任務(wù)的執(zhí)行、到期情況、整個(gè)項(xiàng)目的進(jìn)度等等,根據(jù)統(tǒng)計(jì)情況,做相應(yīng)通知處理;
這樣一個(gè)場景,如何編程實(shí)現(xiàn)?
用一般的編程方式,是無法實(shí)現(xiàn)自動(dòng)觸發(fā)與統(tǒng)計(jì)的。當(dāng)然,簡單的思路,是利于系統(tǒng)的cron job機(jī)制。但這種方式,對(duì)于配置及可靠性方面,需要比較多的人為操作因素。
Swoole是一個(gè)使用c開發(fā)的php擴(kuò)展,通過php就可以實(shí)現(xiàn)高性能web服務(wù)器,同時(shí),還內(nèi)置了定時(shí)器Timer、任務(wù)隊(duì)列Task特性。這樣,基于swoole,你可以在程序?qū)用婵刂茖?shí)現(xiàn)方式,減少對(duì)外部工具 - 獨(dú)立的消息隊(duì)列服務(wù)器、定時(shí)任務(wù)管理工具等的依賴性。
swoole的強(qiáng)大之處就在與其進(jìn)程模型的設(shè)計(jì),既解決了異步問題,又解決了并行。用法如下:
swoole_server_addtimer($serv, 10);
第二個(gè)參數(shù)是定時(shí)器的間隔時(shí)間,單位為秒。swoole定時(shí)器的最小顆粒是1秒。支持多個(gè)定時(shí)器。注意不能存在2個(gè)相同間隔時(shí)間的定時(shí)器。 增加定時(shí)器后需要寫一個(gè)回調(diào)函數(shù)。
具體代碼如下:
swoole_server_handler($serv, 'onTimer', my_OnTimer);function my_OnTimer($serv, $interval){ echo "Timer[$interval] is call/n";}
Task模塊,用來做一些異步的慢速任務(wù),比如webim中發(fā)廣播。類似node.js,假如有10萬個(gè)連接,要發(fā)廣播時(shí),那會(huì)循環(huán)10萬次,這時(shí)候程序不能做任何事情,不能接受新的連接,也不能收包發(fā)包。
而swoole不同,丟給task進(jìn)程之后,你的reactor,worker照跑不誤。任務(wù)完成后會(huì)異步地通知worker進(jìn)程告訴它此任務(wù)已經(jīng)完成。
當(dāng)然task模塊的作用還不僅如此,實(shí)現(xiàn)php的數(shù)據(jù)庫連接池,異步隊(duì)列等等,還需要進(jìn)一步挖掘。
感興趣的讀者可以測試一下本文所述實(shí)例代碼,并根據(jù)自身項(xiàng)目需求進(jìn)一步挖掘其用法。
php技術(shù):PHP框架Swoole定時(shí)器Timer特性分析,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。