व्यावसायिक प्रारंभ
कभी-कभी हमें प्रक्रिया के बाद कुछ व्यावसायिक प्रारंभ करने की आवश्यकता होती है, यह प्रारंभ प्रक्रिया के जीवनकाल में केवल एक बार होती है, जैसे प्रक्रिया शुरू होने के बाद एक टाइमर सेट करना, या डेटाबेस कनेक्शन की प्रारंभिकीकरण आदि। नीचे हम इसका विवरण देंगे।
सिद्धांत
प्रोसेस में बताए गए सिद्धांत के अनुसार, webman प्रक्रिया शुरू होने के बाद config/bootstrap.php (इसमें config/plugin/*/*/bootstrap.php भी शामिल है) में सेट किए गए कक्षाओं को लोड करता है और कक्षाओं का start मेथड चलाता है। हम start मेथड में व्यावसायिक कोड जोड़ सकते हैं, जिससे प्रक्रिया शुरू होने के बाद व्यवसायिक प्रारंभ कार्य समाप्त हो जाएगा।
प्रक्रिया
मान लीजिए हमें एक टाइमर बनाना है, जो वर्तमान प्रक्रिया के मेमोरी उपयोग की समय-समय पर रिपोर्ट करता है, इस कक्षा का नाम MemReport है।
कमांड चलाएं
कमांड php webman make:bootstrap MemReport चलाएं और शुरू करने के लिए app/bootstrap/MemReport.php नामक प्रारंभ फ़ाइल बनाएँ।
संकेत
यदि आपके पास 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 मेथड को भी चलाया, तो हम$workerके द्वारा यह निर्णय ले सकते हैं कि क्या यह कमांड लाइन माहौल है और फिर उसके आधार पर व्यावसायिक प्रारंभ कोड को चलाने का निर्णय ले सकते हैं।
प्रक्रिया के साथ विन्यास
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";
});
}
}