ウォーカーマンタイマー使用

18865 ワード

From: http://doc3.workerman.net/worker-development/add.html
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();