การเริ่มต้นธุรกิจ

บางครั้งเราจำเป็นต้องทำการเริ่มต้นธุรกิจบางอย่างหลังจากที่กระบวนการเริ่มทำงาน การเริ่มต้นนี้จะทำเพียงครั้งเดียวในอายุการใช้งานของกระบวนการ เช่น การตั้งค่าตัวจับเวลา หลังจากกระบวนการเริ่มต้น หรือการเชื่อมต่อกับฐานข้อมูล เป็นต้น ด้านล่างเราจะอธิบายถึงเรื่องนี้

หลักการ

ตามที่อธิบายใน กระบวนการดำเนินการ เมื่อกระบวนการเริ่มต้น 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";
        });

    }

}