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