摘要:你好,的協(xié)程高性能網(wǎng)絡通信引擎,使用語言編寫,提供了多種通信協(xié)議的網(wǎng)絡服務器和客戶端模塊??蓱糜诨ヂ?lián)網(wǎng)移動通信企業(yè)軟件網(wǎng)絡游戲物聯(lián)網(wǎng)車聯(lián)網(wǎng)智能家庭等領域。這篇文章主要分享毫秒精度的定時器。最小時間粒度為毫秒。
你好,Swoole
PHP 的協(xié)程高性能網(wǎng)絡通信引擎,使用 C/C++ 語言編寫,提供了多種通信協(xié)議的網(wǎng)絡服務器和客戶端模塊。
Swoole 可應用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、網(wǎng)絡游戲、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)、智能家庭等領域。
學習 Swoole 之前,最好先了解下底層知識,比如,線程/進程、IO、TCP/IP協(xié)議 等。
推薦大家讀一下《Linux 高性能服務器編程》這本書。我有這本書的PDF版,需要的可以關注公眾號,回復 “Linux 高性能服務器編程” 即可獲取。
這篇文章主要分享 Timer 毫秒精度的定時器。
本地版本:PHP 7.2.6、Swoole 4.3.1。
Timer主要有三個方法:
swoole_timer_tick 間隔的時鐘控制器
swoole_timer_after 指定的時間后執(zhí)行
swoole_timer_clear 刪除定時器
示例代碼:
//每隔3000ms觸發(fā)一次 $timer_id = swoole_timer_tick(3000, function () { echo "tick 3000ms - ".date("Y-m-d H:i:s")." "; }); //9000ms后刪除定時器 swoole_timer_after(9000, function () use ($timer_id) { echo "after 9000ms - ".date("Y-m-d H:i:s")." "; 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應用場景
一、比如,每天凌晨跑業(yè)務腳本,腳本中包括了請求其他業(yè)務方或第三方的接口,如果接口超時無響應或沒有數(shù)據(jù)返回,需要進行重試。
重試機制為:每5隔分鐘再發(fā)送一次請求,最多嘗試5次,在5次內(nèi)成功停止該任務,5次仍失敗也停止該任務。
示例代碼:
$api_url = "xxx"; //接口地址 $exec_num = 0; //執(zhí)行次數(shù) 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"). " 執(zhí)行任務中...(".$exec_num.") "; if ($result) { //業(yè)務代碼... swoole_timer_clear($timer_id); // 停止定時器 echo date("Y-m-d H:i:s"). " 第(".$exec_num.")次請求接口任務執(zhí)行成功 "; } else { if ($exec_num >= 5) { swoole_timer_clear($timer_id); // 停止定時器 echo date("Y-m-d H:i:s"). " 請求接口失敗,已失敗5次,停止執(zhí)行 "; } else { echo date("Y-m-d H:i:s"). " 請求接口失敗,5分鐘后再次嘗試 "; } } });
運行結果:
2019-04-07 21:40:48 執(zhí)行任務中...(1) 2019-04-07 21:40:48 請求接口失敗,5分鐘后再次嘗試 2019-04-07 21:45:48 執(zhí)行任務中...(2) 2019-04-07 21:45:48 請求接口失敗,5分鐘后再次嘗試 2019-04-07 21:50:48 執(zhí)行任務中...(3) 2019-04-07 21:50:48 請求接口失敗,5分鐘后再次嘗試 2019-04-07 21:55:48 執(zhí)行任務中...(4) 2019-04-07 21:55:48 請求接口失敗,5分鐘后再次嘗試 2019-04-07 22:00:48 執(zhí)行任務中...(5) 2019-04-07 22:00:48 請求接口失敗,已失敗5次,停止執(zhí)行
二、比如,設計一個用WEB界面管理管理定時任務的系統(tǒng)。
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界面管理
登錄、權限管理
任務管理(增刪改查)
腳本機管理(機器IP地址)
任務日志
架構圖
項目地址
https://github.com/osgochina/...
三、比如,監(jiān)控服務器狀況。
參考文檔https://wiki.swoole.com/wiki/...
推薦閱讀系統(tǒng)的講解 - SSO 單點登錄
系統(tǒng)的講解 - PHP WEB 安全防御
系統(tǒng)的講解 - PHP 緩存技術
系統(tǒng)的講解 - PHP 接口簽名驗證
系統(tǒng)的講解 - PHP 浮點數(shù)高精度運算
本文歡迎轉發(fā),轉發(fā)請注明作者和出處,謝謝!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/31462.html
摘要:從入門到放棄二一異步毫秒定時器設置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。 swoole——從入門到放棄(二) 一、異步毫秒定時器 swoole_timer_tick:設置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:從入門到放棄二一異步毫秒定時器設置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。 swoole——從入門到放棄(二) 一、異步毫秒定時器 swoole_timer_tick:設置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:清空主進程殘留的定時器與信號。設定為執(zhí)行回調(diào)函數(shù)如果在回調(diào)函數(shù)中調(diào)用了異步系統(tǒng),啟動函數(shù)進行事件循環(huán)。因此為了區(qū)分兩者,規(guī)定并不允許兩者同時存在。 前言 swoole-1.7.2 增加了一個進程管理模塊,用來替代 PHP 的 pcntl 擴展。 PHP自帶的pcntl,存在很多不足,如 pcntl 沒有提供進程間通信的功能 pcntl 不支持重定向標準輸入和輸出 pcntl 只...
摘要:當其就緒時,會調(diào)用執(zhí)行定時函數(shù)。進程超時停止進程將要停止時,并不會立刻停止,而是會等待事件循環(huán)結束后停止,這時為了防止進程不退出,還設置了的延遲,超過就會停止該進程。當允許空閑時間小于時,統(tǒng)一每隔檢測空閑連接。 前言 swoole 的 timer 模塊功能有三個:用戶定時任務、剔除空閑連接、更新 server 時間。timer 模塊的底層有兩種,一種是基于 alarm 信號,一種是基于...
閱讀 800·2023-04-25 20:47
閱讀 2566·2019-08-30 15:53
閱讀 975·2019-08-26 14:05
閱讀 923·2019-08-26 11:59
閱讀 1708·2019-08-26 11:43
閱讀 1725·2019-08-26 10:57
閱讀 1382·2019-08-23 18:23
閱讀 2729·2019-08-23 12:57