初始化 الأعمال
في بعض الأحيان نحتاج إلى إجراء بعض عمليات تهيئة الأعمال بعد بدء العملية، يتم تنفيذ هذا التهيئة مرة واحدة فقط خلال دورة حياة العملية، مثل إعداد مؤقت بعد بدء العملية، أو تهيئة اتصال بقاعدة البيانات وغيرها. سنقوم بشرح هذا أدناه.
المبدأ
وفقًا لوصف سير التنفيذ، يقوم 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";
});
}
}