Inizializzazione Aziendale

A volte è necessario eseguire alcune operazioni di inizializzazione aziendale dopo l'avvio del processo, e questa inizializzazione viene eseguita solo una volta nel ciclo di vita del processo, come impostare un timer dopo l'avvio del processo o inizializzare una connessione al database. Di seguito spiegheremo questo argomento.

Principio

Secondo le indicazioni nella Sequenza di Esecuzione, webman caricherà le classi impostate in config/bootstrap.php (inclusi config/plugin/*/*/bootstrap.php) dopo l'avvio del processo e eseguirà il metodo start delle classi. Possiamo inserire il codice aziendale nel metodo start per completare le operazioni di inizializzazione aziendale dopo l'avvio del processo.

Procedura

Supponiamo di voler creare un timer per segnalare periodicamente l'uso della memoria del processo corrente, chiameremo questa classe MemReport.

Esecuzione del Comando

Esegui il comando php webman make:bootstrap MemReport per generare il file di inizializzazione app/bootstrap/MemReport.php.

Suggerimento
Se il tuo webman non ha installato webman/console, esegui il comando composer require webman/console per installarlo.

Modifica del File di Inizializzazione

Modifica app/bootstrap/MemReport.php, il contenuto sarà simile al seguente:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // È un ambiente da linea di comando ?
        $is_console = !$worker;
        if ($is_console) {
            // Se non vuoi che l'ambiente da linea di comando esegua questa inizializzazione, ritorna direttamente qui
            return;
        }

        // Esegui ogni 10 secondi
        \Workerman\Timer::add(10, function () {
            // Per comodità di dimostrazione, qui usiamo l'output al posto del processo di segnalazione
            echo memory_get_usage() . "\n";
        });

    }

}

Suggerimento
Quando si utilizza la linea di comando, il framework eseguirà anche il metodo start configurato in config/bootstrap.php. Possiamo determinare se siamo in un ambiente da linea di comando verificando se $worker è null, e decidere se eseguire il codice di inizializzazione aziendale.

Configurazione all'Avvio del Processo

Apri config/bootstrap.php e aggiungi la classe MemReport negli elementi di avvio.

return [
    // ...qui sono omesse altre configurazioni...

    app\bootstrap\MemReport::class,
];

In questo modo abbiamo completato un processo di inizializzazione aziendale.

Ulteriori Informazioni

Il metodo start configurato in config/bootstrap.php verrà eseguito anche dopo l'avvio di Processi Personalizzati. Possiamo utilizzare $worker->name per determinare quale processo è attualmente in esecuzione e ulteriormente utilizzare $worker->id per determinare quale processo n. utilizziamo, e quindi decidere se eseguire il codice di inizializzazione aziendale in quel processo. Ad esempio, se vogliamo eseguire solo nel processo 0 di webman, il contenuto di MemReport.php sarà simile al seguente:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // È un ambiente da linea di comando ?
        $is_console = !$worker;
        if ($is_console) {
            // Se non vuoi che l'ambiente da linea di comando esegua questa inizializzazione, ritorna direttamente qui
            return;
        }

        // Esegui solo nel processo 0 di webman
        if ($worker->name != 'webman' && $worker->id != 0) {
            return;
        }

        // Esegui ogni 10 secondi
        \Workerman\Timer::add(10, function () {
            // Per comodità di dimostrazione, qui usiamo l'output al posto del processo di segnalazione
            echo memory_get_usage() . "\n";
        });

    }

}