初始化 الأعمال

في بعض الأحيان نحتاج إلى إجراء بعض عمليات تهيئة الأعمال بعد بدء العملية، يتم تنفيذ هذا التهيئة مرة واحدة فقط خلال دورة حياة العملية، مثل إعداد مؤقت بعد بدء العملية، أو تهيئة اتصال بقاعدة البيانات وغيرها. سنقوم بشرح هذا أدناه.

المبدأ

وفقًا لوصف سير التنفيذ، يقوم 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";
        });

    }

}

تنبيه
عند استخدام سطر الأوامر، سيقوم الإطار أيضًا بتنفيذ طريقة start المكونة في config/bootstrap.php، يمكننا تحديد ما إذا كانت البيئة هي بيئة سطر الأوامر من خلال ما إذا كان $worker هو null، وبالتالي نقرر ما إذا كان يجب تنفيذ كود تهيئة الأعمال.

التهيئة عند بدء العملية

افتح config/bootstrap.php وأضف فئة MemReport إلى عناصر التشغيل.

return [
    // ...تم حذف إعدادات أخرى هنا...

    app\bootstrap\MemReport::class,
];

بهذا نكون قد أكملنا عملية تهيئة الأعمال.

ملاحظات إضافية

سوف يتم تنفيذ طريقة start المكونة في config/bootstrap.php أيضًا بعد بدء عمليات مخصصة، يمكننا استخدام $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";
        });

    }

}