首先,在各種業務型系統中,往往需要服務器在后臺掃描相關數據,觸發相應的統計、通知等操作。
比如對于一個項目管理系統,需要每天的特定時間內,統計每項任務的執行、到期情況、整個項目的進度等等,根據統計情況,做相應通知處理;? ? ? ? ? ? ? ? ? ? ? ? (推薦學習: swoole視頻教程)
這樣一個場景,如何編程實現?
用一般的編程方式,是無法實現自動觸發與統計的。當然,簡單的思路,是利于系統的cron job機制。但這種方式,對于配置及可靠性方面,需要比較多的人為操作因素。
swoole是一個使用c開發的php擴展,通過php就可以實現高性能web服務器,同時,還內置了定時器Timer、任務隊列Task特性。這樣,基于swoole,你可以在程序層面控制實現方式,減少對外部工具 – 獨立的消息隊列服務器、定時任務管理工具等的依賴性。
swoole的強大之處就在與其進程模型的設計,既解決了異步問題,又解決了并行。
用法如下:
swoole_server_addtimer($serv,?10);
第二個參數是定時器的間隔時間,單位為秒。swoole定時器的最小顆粒是1秒。支持多個定時器。注意不能存在2個相同間隔時間的定時器。 增加定時器后需要寫一個回調函數。
具體代碼如下:
swoole_server_handler($serv,?'onTimer',?my_OnTimer); function?my_OnTimer($serv,?$interval) { ??echo?"Timer[$interval]?is?calln"; }
Task模塊,用來做一些異步的慢速任務,比如webim中發廣播。類似node.js,假如有10萬個連接,要發廣播時,那會循環10萬次,這時候程序不能做任何事情,不能接受新的連接,也不能收包發包。
而swoole不同,丟給task進程之后,你的reactor,worker照跑不誤。任務完成后會異步地通知worker進程告訴它此任務已經完成。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END