ব্যবসায়িক প্রাথমিককরণ

কখনও কখনও আমাদের প্রক্রিয়া শুরু হওয়ার পরে কিছু ব্যবসায়িক প্রাথমিককরণ করতে হবে, এই প্রাথমিককরণ প্রক্রিয়ার জীবনচক্রে একবারই সম্পন্ন হয়, যেমন প্রক্রিয়া শুরু হওয়ার পরে একটি টাইমার সেট করা, বা ডাটাবেস সংযোগ ইত্যাদি শুরু করা। নিচে আমরা এটি সম্পর্কে আলোচনা করব।

নীতিগত আলোচনা

নির্বাহী প্রক্রিয়া এর বর্ণনা অনুযায়ী, 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 সেকেন্ডে একবার uitvoer
        \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 দ্বারা কোন প্রক্রিয়া তা নির্ধারণ করে ব্যবসায়িক প্রাথমিককরণ কোড কার্যকর করা হবে কিনা তা নির্ধারণ করতে পারি, যেমন আমরা যদি শুধুমাত্র 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 সেকেন্ডে একবার uitvoer
        \Workerman\Timer::add(10, function () {
            // প্রদর্শনের সুবিধার্থে, এখানে রিপোর্ট করার প্রক্রিয়া পরিবর্তে আউটপুট ব্যবহার করা হয়েছে
            echo memory_get_usage() . "\n";
        });

    }

}