国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

業(yè)務(wù)初始化

有時(shí)我們需要在進(jìn)程啟動(dòng)后做一些業(yè)務(wù)初始化,這個(gè)初始化在進(jìn)程生命周期只執(zhí)行一次,例如進(jìn)程啟動(dòng)后設(shè)置一個(gè)定時(shí)器,或者初始化數(shù)據(jù)庫連接等。下面我們將對(duì)此進(jìn)行講解。

原理

根據(jù) 執(zhí)行流程 中的說明,webman在進(jìn)程啟動(dòng)后會(huì)加載config/bootstrap.php(包括config/plugin/*/*/bootstrap.php)中設(shè)置的類,并執(zhí)行類的start方法。我們?cè)趕tart方法中可以加入業(yè)務(wù)代碼,即可完成進(jìn)程啟動(dòng)后業(yè)務(wù)初始化操作。

流程

假設(shè)我們要做一個(gè)定時(shí)器,用于定時(shí)上報(bào)當(dāng)前進(jìn)程的內(nèi)存占用,這個(gè)類取名為MemReport

執(zhí)行命令

執(zhí)行命令 php webman make:bootstrap MemReport 生成初始化文件 app/bootstrap/MemReport.php

提示
如果你的webman沒有安裝 webman/console,執(zhí)行命令 composer require webman/console 安裝

編輯初始化文件

編輯app/bootstrap/MemReport.php,內(nèi)容類似如下:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // 是否是命令行環(huán)境 ?
        $is_console = !$worker;
        if ($is_console) {
            // 如果你不想命令行環(huán)境執(zhí)行這個(gè)初始化,則在這里直接返回
            return;
        }

        // 每隔10秒執(zhí)行一次
        \Workerman\Timer::add(10, function () {
            // 為了方便演示,這里使用輸出代替上報(bào)過程
            echo memory_get_usage() . "\n";
        });

    }

}

提示
在使用命令行時(shí),框架也會(huì)執(zhí)行config/bootstrap.php配置的start方法,我們可以通過$worker是否是null來判斷是否是命令行環(huán)境,從而決定是否執(zhí)行業(yè)務(wù)初始化代碼。

配置隨進(jìn)程啟動(dòng)

打開 config/bootstrap.phpMemReport類加入到啟動(dòng)項(xiàng)中。

return [
    // ...這里省略了其它配置...

    app\bootstrap\MemReport::class,
];

這樣我們就完成了一個(gè)業(yè)務(wù)初始化流程。

補(bǔ)充說明

自定義進(jìn)程啟動(dòng)后也會(huì)執(zhí)行config/bootstrap.php配置的start方法,我們可以通過$worker->name 來判斷當(dāng)前進(jìn)程是什么進(jìn)程,然后決定是否在該進(jìn)程執(zhí)行你的業(yè)務(wù)初始化代碼,例如我們不需要監(jiān)控monitor進(jìn)程,則MemReport.php內(nèi)容類似如下:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // 是否是命令行環(huán)境 ?
        $is_console = !$worker;
        if ($is_console) {
            // 如果你不想命令行環(huán)境執(zhí)行這個(gè)初始化,則在這里直接返回
            return;
        }

        // monitor進(jìn)程不執(zhí)行定時(shí)器
        if ($worker->name == 'monitor') {
            return;
        }

        // 每隔10秒執(zhí)行一次
        \Workerman\Timer::add(10, function () {
            // 為了方便演示,這里使用輸出代替上報(bào)過程
            echo memory_get_usage() . "\n";
        });

    }

}
編輯于2024-03-13 17:42:49 完善本頁 +發(fā)起討論
贊助商