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

來源:互聯網
上載者:User

標籤:style   blog   class   code   tar   color   

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

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

這樣一個情境,如何編程實現?

用一般的編程方式,是無法實現自動觸發與統計的。當然,簡單的思路,是利於系統的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 call\n";}

 

Task模組,用來做一些非同步慢速任務,比如webim中發廣播。類似node.js,假如有10萬個串連,要發廣播時,那會迴圈10萬次,這時候程式不能做任何事情,不能接受新的串連,也不能收包發包。

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

當然task模組的作用還不僅如此,實現PHP的資料庫連接池,非同步隊列等等,還需要進一步挖掘。

 

 參考:

http://rango.swoole.com/archives/305

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.