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

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

หลักการ

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

    }

}