जोड़ें
int \Workerman\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
किसी फ़ंक्शन या क्लास मेथड को समयबद्ध तरीके से निष्पादित करें।
ध्यान दें: टाइमर वर्तमान प्रोसेस में चल रहा है, workerman में टाइमर चलाने के लिए नई प्रोसेस या थ्रेड नहीं बनाए जाते।
पैरामीटर
time_interval
कितनी देर में एक बार निष्पादित करना है, यूनिट सेकंड में, दशमलव का समर्थन करता है, इसे 0.001 तक सटीक किया जा सकता है, यानी यह मिलीसेकंड स्तर तक सटीक है।
callback
कॉलबैक फ़ंक्शन ध्यान दें: यदि कॉलबैक फ़ंक्शन क्लास का मेथड है, तो मेथड को public प्रॉपर्टी होना आवश्यक है
args
कॉलबैक फ़ंक्शन के पैरामीटर, यह एक एरे होनी चाहिए, एरे के तत्व पैरामीटर मान हैं
persistent
यह स्थायी है या नहीं, यदि इसे केवल एक बार निष्पादित करना है, तो false पास करें (केवल एक बार निष्पादित होने वाले कार्य को निष्पादित होने के बाद स्वचालित रूप से नष्ट कर दिया जाएगा, Timer::del() को कॉल करने की आवश्यकता नहीं)। डिफ़ॉल्ट रूप से true है, यानी समय-समय पर निष्पादित करना जारी रखता है।
लौटाई गई वैल्यू
एक पूर्णांक लौटाती है, जो टाइमर का timerid दर्शाता है, आप इस टाइमर को नष्ट करने के लिए Timer::del($timerid) कॉल कर सकते हैं।
उदाहरण
1, समयबद्ध फ़ंक्शन के लिए अनाम फ़ंक्शन (क्लोजर)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$task = new Worker();
// समयबद्ध कार्य का निष्कारण करने के लिए कितने प्रोसेस शुरू करें, ध्यान दें कि क्या व्यवसाय में मल्टीप्रोसेस में मुकाबला समस्याएँ हैं
$task->count = 1;
$task->onWorkerStart = function(Worker $task)
{
// हर 2.5 सेकंड में एक बार निष्पादित करें
$time_interval = 2.5;
Timer::add($time_interval, function()
{
echo "कार्य निष्पादित हुआ\n";
});
};
// वर्कर चलाएं
Worker::runAll();
2, निर्दिष्ट प्रोसेस में केवल टाइमर सेट करें
एक वर्कर इंस्टेंस में 4 प्रोसेस हैं, केवल id नंबर 0 के प्रोसेस पर टाइमर सेट करें।
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->count = 4;
$worker->onWorkerStart = function(Worker $worker)
{
// केवल id नंबर 0 के प्रोसेस में टाइमर सेट करें, अन्य 1, 2, 3 नंबर के प्रोसेस पर टाइमर सेट न करें
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4 वर्कर प्रोसेस, केवल 0 नंबर प्रोसेस में टाइमर सेट किया गया\n";
});
}
};
// वर्कर चलाएं
Worker::runAll();
3, समयबद्ध फ़ंक्शन के लिए अनाम फ़ंक्शन, क्लोजर के माध्यम से पैरामीटर पास करना
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$ws_worker = new Worker('websocket://0.0.0.0:8080');
$ws_worker->count = 8;
// कनेक्शन स्थापित होने पर संबंधित कनेक्शन के लिए टाइमर सेट करें
$ws_worker->onConnect = function(TcpConnection $connection)
{
// हर 10 सेकंड में एक बार निष्पादित करें
$time_interval = 10;
$connect_time = time();
// कनेक्शन ऑब्जेक्ट में अस्थायी रूप से एक timer_id प्रॉपर्टी जोड़ें जो टाइमर id को संग्रहीत करती है
$connection->timer_id = Timer::add($time_interval, function()use($connection, $connect_time)
{
$connection->send($connect_time);
});
};
// कनेक्शन बंद होने पर, संबंधित कनेक्शन के टाइमर को हटा दें
$ws_worker->onClose = function(TcpConnection $connection)
{
// टाइमर हटाएं
Timer::del($connection->timer_id);
};
// वर्कर चलाएं
Worker::runAll();
4, समयबद्ध फ़ंक्शन के लिए अनाम फ़ंक्शन, टाइमर इंटरफ़ेस के माध्यम से पैरामीटर पास करना
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$ws_worker = new Worker('websocket://0.0.0.0:8080');
$ws_worker->count = 8;
// कनेक्शन स्थापित होने पर संबंधित कनेक्शन के लिए टाइमर सेट करें
$ws_worker->onConnect = function(TcpConnection $connection)
{
// हर 10 सेकंड में एक बार निष्पादित करें
$time_interval = 10;
$connect_time = time();
// कनेक्शन ऑब्जेक्ट में अस्थायी रूप से एक timer_id प्रॉपर्टी जोड़ें जो टाइमर id को संग्रहीत करती है
$connection->timer_id = Timer::add($time_interval, function($connection, $connect_time)
{
$connection->send($connect_time);
}, array($connection, $connect_time));
};
// कनेक्शन बंद होने पर, संबंधित कनेक्शन के टाइमर को हटा दें
$ws_worker->onClose = function(TcpConnection $connection)
{
// टाइमर हटाएं
Timer::del($connection->timer_id);
};
// वर्कर चलाएं
Worker::runAll();
5, समयबद्ध फ़ंक्शन सामान्य फ़ंक्शन के रूप में
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
// सामान्य फ़ंक्शन
function send_mail($to, $content)
{
echo "मेल भेजें ...\n";
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
$to = 'workerman@workerman.net';
$content = 'नमस्ते, वर्करमैन';
// 10 सेकंड बाद मेल भेजने का कार्य निष्पादित करें, अंतिम पैरामीटर false पास करें, जो केवल एक बार चलने का संकेत देता है
Timer::add(10, 'send_mail', array($to, $content), false);
};
// वर्कर चलाएं
Worker::runAll();
6, समयबद्ध फ़ंक्शन क्लास के मेथड के रूप में
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
class Mail
{
// ध्यान दें, कॉलबैक फ़ंक्शन प्रॉपर्टी को public होना चाहिए
public function send($to, $content)
{
echo "मेल भेजें ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10 सेकंड बाद एक बार मेल भेजें
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'नमस्ते, वर्करमैन';
Timer::add(10, array($mail, 'send'), array($to, $content), false);
};
// वर्कर चलाएं
Worker::runAll();
7, समयबद्ध फ़ंक्शन क्लास के मेथड के रूप में (क्लास के अंदर टाइमर का उपयोग करना)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
class Mail
{
// ध्यान दें, कॉलबैक फ़ंक्शन प्रॉपर्टी को public होना चाहिए
public function send($to, $content)
{
echo "मेल भेजें ...\n";
}
public function sendLater($to, $content)
{
// यदि कॉल किया जाने वाला मेथड वर्तमान क्लास का है, तो कॉलबैक एरे का पहला तत्व $this होगा
Timer::add(10, array($this, 'send'), array($to, $content), false);
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// 10 सेकंड बाद एक बार मेल भेजें
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'नमस्ते, वर्करमैन';
$mail->sendLater($to, $content);
};
// वर्कर चलाएं
Worker::runAll();
8, समयबद्ध फ़ंक्शन क्लास के स्थैतिक मेथड के रूप में
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
class Mail
{
// ध्यान दें कि यह स्थैतिक मेथड है, कॉलबैक फ़ंक्शन प्रॉपर्टी को भी public होना चाहिए
public static function send($to, $content)
{
echo "मेल भेजें ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// 10 सेकंड बाद एक बार मेल भेजें
$to = 'workerman@workerman.net';
$content = 'नमस्ते, वर्करमैन';
// क्लास के स्थैतिक मेथड को समयबद्ध तरीके से कॉल करें
Timer::add(10, array('Mail', 'send'), array($to, $content), false);
};
// वर्कर चलाएं
Worker::runAll();
9, समयबद्ध फ़ंक्शन क्लास के स्थैतिक मेथड के रूप में (नामित स्पेस के साथ)
namespace Task;
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
class Mail
{
// ध्यान दें कि यह स्थैतिक मेथड है, कॉलबैक फ़ंक्शन प्रॉपर्टी को भी public होना चाहिए
public static function send($to, $content)
{
echo "मेल भेजें ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// 10 सेकंड बाद एक बार मेल भेजें
$to = 'workerman@workerman.net';
$content = 'नमस्ते, वर्करमैन';
// नामित स्पेस के साथ क्लास के स्थैतिक मेथड को समयबद्ध तरीके से कॉल करें
Timer::add(10, array('\Task\Mail', 'send'), array($to, $content), false);
};
// वर्कर चलाएं
Worker::runAll();
10, टाइमर के भीतर वर्तमान टाइमर को नष्ट करना (use क्लोजर तरीके से $timer_id पास करना)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// गिनती
$count = 1;
// ताकि $timer_id सही तरीके से कॉलबैक फ़ंक्शन के भीतर पास हो सके, $timer_id के आगे ampersand & लगाना चाहिए
$timer_id = Timer::add(1, function()use(&$timer_id, &$count)
{
echo "टाइमर चला $count\n";
// 10 बार चलने के बाद वर्तमान टाइमर को नष्ट करें
if($count++ >= 10)
{
echo "Timer::del($timer_id)\n";
Timer::del($timer_id);
}
});
};
// वर्कर चलाएं
Worker::runAll();
11, टाइमर के भीतर वर्तमान टाइमर को नष्ट करना (पैरामीटर तरीके से $timer_id पास करना)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
class Mail
{
public function send($to, $content, $timer_id)
{
// वर्तमान ऑब्जेक्ट के लिए अस्थायी रूप से एक count प्रॉपर्टी जोड़ें, जो टाइमर चलाने की संख्या को रिकॉर्ड करती है
$this->count = empty($this->count) ? 1 : $this->count;
// 10 बार चलने के बाद वर्तमान टाइमर को नष्ट करें
echo "मेल भेजें {$this->count}...\n";
if($this->count++ >= 10)
{
echo "Timer::del($timer_id)\n";
Timer::del($timer_id);
}
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
$mail = new Mail();
// ताकि $timer_id सही तरीके से कॉलबैक फ़ंक्शन के भीतर पास हो सके, $timer_id के आगे ampersand & लगाना चाहिए
$timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id));
};
// वर्कर चलाएं
Worker::runAll();