व्यवसाय प्रारंभिककरण

कभी-कभी हमें प्रक्रिया प्रारंभ होने के बाद कुछ व्यवसाय प्रारंभिककरण करना आवश्यक होता है, यह प्रारंभिककरण प्रक्रिया के जीवनकाल में केवल एक बार निष्पादित होता है, जैसे प्रक्रिया प्रारंभ होने के बाद एक टाइमर सेट करना, या डेटाबेस कनेक्शन को प्रारंभ करना। नीचे हम इसके बारे में जानकारी देंगे।

सिद्धांत

निष्पादन प्रक्रिया के अनुसार, वेबमैन प्रक्रिया प्रारंभ होने के बाद 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 के null होने से判断 कर सकते हैं कि क्या यह कमांड लाइन वातावरण है, इससे हम यह तय कर सकते हैं कि व्यवसाय प्रारंभिककरण कोड को निष्पादित करना है या नहीं।

प्रक्रिया प्रारंभ करते समय सेटिंग्स

config/bootstrap.php खोलें और MemReport वर्ग को प्रारंभिककरण आइटम में जोड़ें।

return [
    // ...यहाँ अन्य सेटिंग्स को छोड़ दिया गया है...

    app\bootstrap\MemReport::class,
];

इस प्रकार हमने एक व्यवसाय प्रारंभिककरण प्रक्रिया पूरी कर ली है।

अतिरिक्त जानकारी

कस्टम प्रक्रिया प्रारंभ होने के बाद भी config/bootstrap.php में सेट की गई start विधि को निष्पादित करेगा, हम \$worker->name द्वारा यह判断 कर सकते हैं कि वर्तमान प्रक्रिया क्या है, आगे जाकर हम \$worker->id द्वारा यह判断 कर सकते हैं कि यह कौन सी प्रक्रिया है, फिर यह तय कर सकते हैं कि क्या इस प्रक्रिया में आपके व्यवसाय प्रारंभिककरण कोड को निष्पादित करना है, उदाहरण के लिए यदि हमें केवल वेबमैन की प्रक्रिया 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;
        }

        // केवल वेबमैन की प्रक्रिया 0 में निष्पादित करें
        if ($worker->name != 'webman' && $worker->id != 0) {
            return;
        }

        // हर 10 सेकंड में एक बार निष्पादित करें
        \Workerman\Timer::add(10, function () {
            // प्रदर्शन की सुविधा के लिए, यहाँ आउटपुट का उपयोग रिपोर्टिंग प्रक्रिया के स्थान पर किया गया है
            echo memory_get_usage() . "\n";
        });

    }

}