這是關於 Swoole 學習的第一篇文章:Swoole Timer 的應用。git
PHP 的協程高性能網絡通訊引擎,使用 C/C++ 語言編寫,提供了多種通訊協議的網絡服務器和客戶端模塊。github
Swoole 可應用於互聯網、移動通訊、企業軟件、網絡遊戲、物聯網、車聯網、智能家庭等領域。編程
學習 Swoole 以前,最好先了解下底層知識,好比,線程/進程、IO、TCP/IP協議 等。api
推薦你們讀一下《Linux 高性能服務器編程》這本書。我有這本書的PDF版,須要的能夠關注公衆號,回覆 「Linux 高性能服務器編程」 便可獲取。服務器
這篇文章主要分享 Timer 毫秒精度的定時器。swoole
本地版本:PHP 7.2.六、Swoole 4.3.1。網絡
主要有三個方法:性能
swoole_timer_tick 間隔的時鐘控制器學習
swoole_timer_after 指定的時間後執行
swoole_timer_clear 刪除定時器
示例代碼:
//每隔3000ms觸發一次 $timer_id = swoole_timer_tick(3000, function () { echo "tick 3000ms - ".date('Y-m-d H:i:s')."\n"; }); //9000ms後刪除定時器 swoole_timer_after(9000, function () use ($timer_id) { echo "after 9000ms - ".date('Y-m-d H:i:s')."\n"; swoole_timer_clear($timer_id); });
運行結果:
tick 3000ms - 2019-04-07 21:36:56 tick 3000ms - 2019-04-07 21:36:59 tick 3000ms - 2019-04-07 21:37:02 after 9000ms - 2019-04-07 21:37:02
1、好比,天天凌晨跑業務腳本,腳本中包括了請求其餘業務方或第三方的接口,若是接口超時無響應或沒有數據返回,須要進行重試。
重試機制爲:每5隔分鐘再發送一次請求,最多嘗試5次,在5次內成功中止該任務,5次仍失敗也中止該任務。
示例代碼:
$api_url = 'xxx'; //接口地址 $exec_num = 0; //執行次數 swoole_timer_tick(5*60*1000, function($timer_id) use ($api_url, &$exec_num) { $exec_num ++ ; $result = $this->requestUrl($api_url); echo date('Y-m-d H:i:s'). " 執行任務中...(".$exec_num.")\n"; if ($result) { //業務代碼... swoole_timer_clear($timer_id); // 中止定時器 echo date('Y-m-d H:i:s'). " 第(".$exec_num.")次請求接口任務執行成功\n"; } else { if ($exec_num >= 5) { swoole_timer_clear($timer_id); // 中止定時器 echo date('Y-m-d H:i:s'). " 請求接口失敗,已失敗5次,中止執行\n"; } else { echo date('Y-m-d H:i:s'). " 請求接口失敗,5分鐘後再次嘗試\n"; } } });
運行結果:
2019-04-07 21:40:48 執行任務中...(1) 2019-04-07 21:40:48 請求接口失敗,5分鐘後再次嘗試 2019-04-07 21:45:48 執行任務中...(2) 2019-04-07 21:45:48 請求接口失敗,5分鐘後再次嘗試 2019-04-07 21:50:48 執行任務中...(3) 2019-04-07 21:50:48 請求接口失敗,5分鐘後再次嘗試 2019-04-07 21:55:48 執行任務中...(4) 2019-04-07 21:55:48 請求接口失敗,5分鐘後再次嘗試 2019-04-07 22:00:48 執行任務中...(5) 2019-04-07 22:00:48 請求接口失敗,已失敗5次,中止執行
2、好比,設計一個用WEB界面管理管理定時任務的系統。
Linux Crontab 最小時間粒度爲分鐘。
PHP Swoole 最小時間粒度爲毫秒。
0 1 2 3 4 5 | | | | | | | | | | | +------ day of week (0 - 6) (Sunday=0) | | | | +------ month (1 - 12) | | | +-------- day of month (1 - 31) | | +---------- hour (0 - 23) | +------------ min (0 - 59) +-------------- sec (0-59)
WEB界面管理
項目地址
https://github.com/osgochina/Donkey
3、好比,監控服務器情況。
本文歡迎轉發,轉發請註明做者和出處,謝謝!