ウォーカーマンタイマー使用
18865 ワード
From: http://doc3.workerman.net/worker-development/add.html
add
パラメータ
戻り値
タイマーのtimeridを表す整数を返します。
例
1、タイミング関数は匿名関数(クローズド)です。
一つのウォーカーの例は4つのプロセスがあり、id番号が0のプロセスにタイマーをセットするだけです。
add
int \Workerman\Lib\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
タイミングで関数またはクラスの方法を実行します。パラメータ
time_interval
どれぐらいの時間で一回実行しますか?単位秒は小数を支持して、正確に0.001までできます。即ち、ミリ秒のレベルまでです。callback
コールバック関数 : , public
args
コールバック関数のパラメータは、配列、配列要素がパラメータ値である必要があります。persistent
耐久性があるかどうかは、一回のタイミングで実行したい場合、転送false(一回だけ実行したタスクは実行後に自動的に破壊されます。Timer::del()
を呼び出す必要はありません。)デフォルトはtrueです。つまりいつもタイミングで実行します。戻り値
タイマーのtimeridを表す整数を返します。
Timer::del($timerid)
を呼び出して、このタイマーを破棄することができます。例
1、タイミング関数は匿名関数(クローズド)です。
use \Workerman\Worker; use \Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $task = new Worker(); // , $task->count = 1; $task->onWorkerStart = function($task) { // 2.5 $time_interval = 2.5; Timer::add($time_interval, function() { echo "task run
"; }); }; // worker Worker::runAll();
2、タイミング関数は普通関数です。require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; // function send_mail($to, $content) { echo "send mail ...
"; } $task = new Worker(); $task->onWorkerStart = function($task) { $to = '[email protected]'; $content = 'hello workerman'; // 10 , false, Timer::add(10, 'send_mail', array($to, $content), false); }; // worker Worker::runAll();
3、タイミング関数がクラスの方法require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; class Mail { // , public public function send($to, $content) { echo "send mail ...
"; } } $task = new Worker(); $task->onWorkerStart = function($task) { // 10 $mail = new Mail(); $to = '[email protected]'; $content = 'hello workerman'; Timer::add(10, array($mail, 'send'), array($to, $content), false); }; // worker Worker::runAll();
4、タイミング関数はクラス方法(クラス内でタイマーを使用)require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; class Mail { // , public public function send($to, $content) { echo "send mail ...
"; } public function sendLater($to, $content) { // , $this Timer::add(10, array($this, 'send'), array($to, $content), false); } } $task = new Worker(); $task->onWorkerStart = function($task) { // 10 $mail = new Mail(); $to = '[email protected]'; $content = 'hello workerman'; $mail->sendLater($to, $content); }; // worker Worker::runAll();
5、タイミング関数はクラスの静的な方法です。require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; class Mail { // , public public static function send($to, $content) { echo "send mail ...
"; } } $task = new Worker(); $task->onWorkerStart = function($task) { // 10 $to = '[email protected]'; $content = 'hello workerman'; // Timer::add(10, array('Mail', 'send'), array($to, $content), false); }; // worker Worker::runAll();
6、タイミング関数はクラスの静的な方法(名前空間付き)namespace Task; require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; class Mail { // , public public static function send($to, $content) { echo "send mail ...
"; } } $task = new Worker(); $task->onWorkerStart = function($task) { // 10 $to = '[email protected]'; $content = 'hello workerman'; // Timer::add(10, array('\Task\Mail', 'send'), array($to, $content), false); }; // worker Worker::runAll();
7、タイマーで現在のタイマーを破壊します。use \Workerman\Worker; use \Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $task = new Worker(); $task->onWorkerStart = function($task) { // $count = 1; // $timer_id ,$timer_id & $timer_id = Timer::add(1, function()use(&$timer_id, &$count) { echo "Timer run $count
"; // 10 if($count++ >= 10) { echo "Timer::del($timer_id)
"; Timer::del($timer_id); } }); }; // worker Worker::runAll();
8、タイマーで現在のタイマーを破壊する(パラメータ方式の伝達ドルtimerguid)require_once './Workerman/Autoloader.php'; use \Workerman\Worker; use \Workerman\Lib\Timer; class Mail { public function send($to, $content, $timer_id) { // count , $this->count = empty($this->count) ? 1 : $this->count; // 10 echo "send mail {$this->count}...
"; if($this->count++ >= 10) { echo "Timer::del($timer_id)
"; Timer::del($timer_id); } } } $task = new Worker(); $task->onWorkerStart = function($task) { $mail = new Mail(); // $timer_id ,$timer_id & $timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id)); }; // worker Worker::runAll();
9、指定されたプロセスにのみタイマーを設定する一つのウォーカーの例は4つのプロセスがあり、id番号が0のプロセスにタイマーをセットするだけです。
use Workerman\Worker; use Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $worker = new Worker(); $worker->count = 4; $worker->onWorkerStart = function($worker) { // id 0 , 1、2、3 if($worker->id === 0) { Timer::add(1, function(){ echo "4 worker , 0
"; }); } }; // worker Worker::runAll();