تهيئة الأعمال
أحيانًا نحتاج إلى تنفيذ بعض تهيئة الأعمال بعد تشغيل العملية، وتُنفذ هذه التهيئة مرة واحدة خلال دورة حياة العملية، مثل تعيين مؤقت، أو تهيئة اتصال قاعدة البيانات على سبيل المثال. فيما يلي سنشرح ذلك بالتفصيل.
المبدأ
وفقًا للشرح في سير التنفيذ ، بعد بدء تشغيل العملية، يقوم 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
للتحقق ما إذا كان بيئة السطر الأمر أم لا، وبالتالي تحديد ما إذا كان يجب تنفيذ رمز تهيئة الأعمال.
تكوين البدء مع بدء التشغيل
افتح config/bootstrap.php
وأضف فئة MemReport
إلى البنود التي تبدأ.
return [
// ...هنا تم حذف الإعدادات الأخرى...
app\bootstrap\MemReport::class,
];
بهذه الطريقة نكون قد أكملنا عملية تهيئة الأعمال.
ملحق
عندما يبدأ العمل تنفيذ العمليات المخصصة، يقوم أيضًا بتنفيذ طريقة start المحددة في config/bootstrap.php
. يمكننا استخدام $worker->name
للتحقق من نوع العملية الحالية، ومن ثم قرار ما إذا كان يجب تنفيذ رمز تهيئة الأعمال في هذه العملية. على سبيل المثال، إذا كنا لا نحتاج إلى مراقبة عملية monitor، سيكون محتوى 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;
}
// لا تقوم عملية monitor بتنفيذ المؤقت
if ($worker->name == 'monitor') {
return;
}
// تنفيذ كل 10 ثوانٍ
\Workerman\Timer::add(10, function () {
// لأغراض العرض فقط، سنستبدل التقرير بالإخراج
echo memory_get_usage() . "\n";
});
}
}