การเริ่มต้นธุรกิจ
บางครั้งเราต้องการทำการเริ่มต้นธุรกิจหลังจากกระบวนการเริ่มต้น การเริ่มต้นนี้จะถูกดำเนินการเพียงครั้งเดียวตลอดอายุการดำเนินงานของกระบวนการ เช่นการตั้งค่าตัวจับเวลาหลังจากเริ่มต้นกระบวนการหรือการเชื่อมต่อฐานข้อมูล ด้านล่างนี้เราจะอธิบายถึงเรื่องนี้
หลักการ
ตามคำอธิบายใน กระบวนการดำเนินงาน 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
เราสามารถตรวจสอบว่าปัจจุบันเป็นกระบวนการประเภทอะไรและจึงตัดสินใจว่าจะทำการเริ่มต้นธุรกิจหรือไม่ ตัวอย่างเช่นถ้าเราไม่ต้องการจะควบคุมกระบวนการ 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";
});
}
}