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 installatowebman/console
, esegui il comandocomposer 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 inconfig/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";
});
}
}