天天看點

PHP架構Swoole的一個定時器Timer特性

在各種業務型系統中,往往需要伺服器在背景掃描相關資料,觸發相應的統計、通知等操作。

比如對于一個項目管理系統,需要每天的特定時間内,統計每項任務的執行、到期情況、整個項目的進度等等,根據統計情況,做相應通知處理;

這樣一個場景,如何程式設計實作?

用一般的程式設計方式,是無法實作自動觸發與統計的。當然,簡單的思路,是利于系統的cron job機制。但這種方式,對于配置及可靠性方面,需要比較多的人為操作因素。

Swoole是一個使用c開發的php擴充,通過php就可以實作高性能web伺服器,同時,還内置了定時器Timer、任務隊列Task特性。這樣,基于swoole,你可以在程式層面控制實作方式,減少對外部工具 - 獨立的消息隊列伺服器、定時任務管理工具等的依賴性。

PHP架構Swoole的一個定時器Timer特性

swoole的強大之處就在與其程序模型的設計,既解決了異步問題,又解決了并行。

swoole_server_addtimer($serv, 10);

第二個參數是定時器的間隔時間,機關為秒。swoole定時器的最小顆粒是1秒。支援多個定時器。注意不能存在2個相同間隔時間的定時器。 增加定時器後需要寫一個回調函數

Task子產品,用來做一些異步的慢速任務,比如webim中發廣播。類似node.js,假如有10萬個連接配接,要發廣播時,那會循環10萬次,這時候程式不能做任何事情,不能接受新的連接配接,也不能收包發包。

而swoole不同,丢給task程序之後,你的reactor,worker照跑不誤。任務完成後會異步地通知worker程序告訴它此任務已經完成。

當然task子產品的作用還不僅如此,實作PHP的資料庫連接配接池,異步隊列等等,還需要進一步挖掘。

 參考:

<a href="http://rango.swoole.com/archives/305" target="_blank">http://rango.swoole.com/archives/305</a>