add
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 "task run\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();
// connection অবজেক্টে সাময়িকভাবে একটি 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();
// connection অবজেক্টে সাময়িকভাবে একটি 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 "send mail ...\n";
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// 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 "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10 সেকেন্ড পরে একবার মেইল পাঠান
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'hello workerman';
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 "send mail ...\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 = 'hello workerman';
$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 "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// 10 সেকেন্ড পরে একবার মেইল পাঠান
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// ক্লাসের স্ট্যাটিক পদ্ধতি নিয়মিত কল করা
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 "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function(Worker $task)
{
// 10 সেকেন্ড পরে একবার মেইল পাঠান
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// নামক স্পেসের সমন্বয়ে ক্লাসের স্ট্যাটিক পদ্ধতি নিয়মিত কল করা
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 এর আগে ঠিকানা চিহ্ন & যুক্ত করতে হবে
$timer_id = Timer::add(1, function()use(&$timer_id, &$count)
{
echo "Timer run $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 "send mail {$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 এর আগে ঠিকানা চিহ্ন & যুক্ত করতে হবে
$timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id));
};
// ওয়ার্কার চালান
Worker::runAll();