การเริ่มต้นธุรกิจ
บางครั้งเราต้องการทำการเริ่มต้นธุรกิจหลังจากกระบวนการเริ่มต้น การเริ่มต้นนี้จะถูกดำเนินการเพียงครั้งเดียวตลอดอายุการดำเนินงานของกระบวนการ เช่นการตั้งค่าตัวจับเวลาหลังจากเริ่มต้นกระบวนการหรือการเชื่อมต่อฐานข้อมูล ด้านล่างนี้เราจะอธิบายถึงเรื่องนี้
หลักการ
ตามคำอธิบายใน กระบวนการดำเนินงาน webman จะโหลดคลาสที่ถูกตั้งค่าใน config/bootstrap.php (รวมถึง config/plugin/*/*/bootstrap.php) เมื่อกระบวนการเริ่มต้น และดำเนินการเริ่มต้นของคลาส ในคำสั่ง start เราสามารถเพิ่มรหัสธุรกิจใน start method เพื่อดำเนินการเริ่มต้นธุรกิจหลังจากเริ่มต้นกระบวนการ
กระบวนการ
สมมติว่าเราต้องการสร้างตัวจับเวลาสำหรับการรายงานการใช้หน่วยความจำปัจจุบันของกระบวนการนี้ คลาสนี้จะมีชื่อว่า 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 method ที่ถูกตั้งค่าในconfig/bootstrap.phpเราสามารถใช้$workerในการตรวจสอบว่าเป็นสภาพแวดล้อมคอนโซลหรือไม่ เพื่อตัดสินใจว่าทำการดำเนินการเริ่มต้นธุรกิจหรือไม่
ตั้งค่าหลังจากการเริ่มต้นกระบวนการ
เปิด config/bootstrap.php และเพิ่มคลาส MemReport ไปยังรายการเริ่มต้น
return [
// ...เราได้ทำการขจัดการตั้งค่าอื่น ๆ ไปซะแล้ว...
app\bootstrap\MemReport::class,
];
ดังนั้นเราก็เสร็จสิ้นกระบวนการเหรียญ่า
คำอธิบายเพิ่มเติม
กระบวนการที่กำหนดเอง หลังจากเริ่มต้นแล้วจะดำเนินการ start method ที่ถูกตั้งค่าไว้ใน config/bootstrap.php ด้วย เราสามารถใช้ $worker->name ตรวจสอบว่าปัจจุบันเป็นกระบวนการประเภทใด และใช้ $worker->id ตรวจสอบหมายเลขกระบวนการ จากนั้นจึงตัดสินใจว่าจะดำเนินการเริ่มต้นธุรกิจของคุณในกระบวนการนั้นหรือไม่ เช่น หากเราต้องการดำเนินการเฉพาะในกระบวนการหมายเลข 0 ของ webman เท่านั้น เนื้อหาใน 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 ของ webman
if ($worker->name != 'webman' || $worker->id != 0) {
return;
}
// ทำการรายงานทุก ๆ 10 วินาที
\Workerman\Timer::add(10, function () {
// เพื่อระงับการสาธิตเราจะใช้การเอาออกเป็นค่าทดแทนการรายงาน
echo memory_get_usage() . "\n";
});
}
}