ব্যাবসা শুরু করুন
কিছু সময় প্রক্রিয়া চালু হওয়ার পরে আমরা কিছু ব্যবসায়িক শুরু করতে হয়, যা প্রক্রিয়ার জীবনকালে একবার মাত্র সম্পাদিত হয়, যেমনঃ প্রক্রিয়া চালু হওয়ার পর একটি টাইমার সেট এবং ডাটাবেস সংযোগ ইনিশিয়ালাইজেশন। নীচে আমরা এটি বিবেচনা করব।
প্রিন্সিপাল
প্রসেস ফ্লো এর ভিত্তিতে, webman প্রক্রিয়া শুরু হওয়ার পর config/bootstrap.php (ইনক্লুড config/plugin/*/*/bootstrap.php) এ সেট করা ক্লাস লোড করে এবং ক্লাসের start মেথড চালিয়ে থাকে। আমরা start মেথডে ব্যবসায় কোড যোগ করে প্রক্রিয়া শুরুর পর ব্যবসা শুরু করা যেতে পারি।
ফ্লো
ধরা যাক আমরা একটি টাইমার তৈরি করতে চাই, যা বর্তমান প্রক্রিয়ার মেমরি অধিগ্রহণকে নির্দেশ করে। এই ক্লাসটি MemReport নামক হবে।
প্রসেস কমান্ড
php webman make:bootstrap MemReport কমান্ড চালানো যেতে পারে এবং ইনিশিয়েলাইজেশন ফাইল app/bootstrap/MemReport.php তৈরি করা যেতে পারে।
নির্দেশ
যদি আপনার webman এwebman/consoleইনস্টল না থাকে, তবেcomposer require webman/consoleকমান্ড চালানো যেতে পারে।
ইনিশিয়েলাইজেশন ফাইল সম্পাদনা করুন
app/bootstrap/MemReport.php ফাইল সম্পাদনা করুন, যেমন -
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// কি আমরা কনসোল মাধ্যম ?
$is_console = !$worker;
if ($is_console) {
// আপনি যদি কনসোল মাধ্যমে এই ইনিশিয়েলাইজেশন চালিয়ে না চান তাহলে এখানে একটি রিটার্ন করুন
return;
}
// প্রতি 10 সেকেন্ড অভিলেখ করুন
\Workerman\Timer::add(10, function () {
// ডেমো করার জন্য, আমরা এখানে রিপোর্টিং প্রক্রিয়াকে প্রতিস্থান হিসাবে ব্যবহার করেছি
echo memory_get_usage() . "\n";
});
}
}
নির্দেশ
অভিলেখ ব্যবহার করা হওয়ার সময়, ফ্রেমওয়ার্কটি অবশ্যইconfig/bootstrap.phpসেটিংস এর start মেথডটি চালাবে, আমরা যেভাবে ডিসিড করবো সেটি চেক করতে পারি কোন মিডিলে এই ব্যবসায় ইনিশিয়েলাইজেশন কোডটি চালিয়ে।
প্রসেস সাথে স্টার্টাপ করাও
config/bootstrap.php খোলুন এবং MemReport ক্লাসটি স্টার্টাপ আইটেমে যোগ করুন।
return [
// ...অন্যান্য কনফিগারেশন এখানে জাতিল...
app\bootstrap\MemReport::class,
];
এভাবে আমরাই একটি ব্যবসায় আরম্ভিক পদক্ষেপ সমাপ্ত করেছি।
সংক্ষেপ মন্তব্য
কাস্টম প্রসেস চালু হওয়ার পর config/bootstrap.php সেটিংস এর start মেথডটি চালিয়ে থাকবে, আমরা $worker->name দিয়ে বর্তমান প্রসেসটি কী তা নির্ণয় করতে পারি এবং $worker->id দিয়ে প্রসেস নম্বর নির্ধারণ করতে পারি, তারপর সেই প্রসেসে আপনার ব্যবসায় ইনিশিয়েলাইজেশন কোড চালাবে কিনা তা সিদ্ধান্ত নিতে পারি। উদাহরণস্বরূপ, যদি আমাদের শুধুমাত্র webman-এর 0 নম্বর প্রসেসে চালানোর প্রয়োজন হয়, তাহলে MemReport.php এর বিষয়বস্তু নিম্নলিখিতরূপে হবে:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// কি আমরা কনসোল মাধ্যম ?
$is_console = !$worker;
if ($is_console) {
// আপনি যদি কনসোল মাধ্যমে এই ইনিশিয়েলাইজেশন চালিয়ে না চান তাহলে এখানে একটি রিটার্ন করুন
return;
}
// শুধুমাত্র webman-এর 0 নম্বর প্রসেসে চালান
if ($worker->name != 'webman' || $worker->id != 0) {
return;
}
// প্রতি 10 সেকেন্ড অভিলেখ করুন
\Workerman\Timer::add(10, function () {
// ডেমো করার জন্য, আমরা এখানে রিপোর্টিং প্রক্রিয়াকে প্রতিস্থান হিসাবে ব্যবহার করেছি
echo memory_get_usage() . "\n";
});
}
}