Geschäftsinitialisierung
Manchmal müssen wir nach dem Start eines Prozesses einige Geschäftsinitialisierungen vornehmen. Diese Initialisierung wird nur einmal im Lebenszyklus des Prozesses ausgeführt, z. B. das Einrichten eines Timers nach dem Start des Prozesses oder das Initialisieren der Datenbankverbindung usw. Im Folgenden werden wir dies genauer erläutern.
Prinzip
Gemäß den Erläuterungen im Ausführungsprozess lädt webman nach dem Start des Prozesses die in config/bootstrap.php
(einschließlich config/plugin/*/*/bootstrap.php
) festgelegten Klassen und führt die start
-Methode der Klasse aus. Wir können Geschäftslogik in die start
-Methode einfügen, um die geschäftlichen Initialisierungsvorgänge nach dem Start des Prozesses abzuschließen.
Ablauf
Angenommen, wir möchten einen Timer einrichten, um den aktuellen Speicherverbrauch des Prozesses zu melden. Diese Klasse wird 'MemReport' genannt.
Befehl ausführen
Führen Sie den Befehl php webman make:bootstrap MemReport
aus, um die Initialisierungsdatei app/bootstrap/MemReport.php
zu generieren.
Hinweis
Wenn Ihr webman daswebman/console
nicht installiert hat, führen Sie den Befehlcomposer require webman/console
zur Installation aus.
Initialisierungsdatei bearbeiten
Bearbeiten Sie app/bootstrap/MemReport.php
. Der Inhalt sollte in etwa wie folgt aussehen:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// Ist es eine Befehlszeilenumgebung?
$is_console = !$worker;
if ($is_console) {
// Wenn Sie nicht möchten, dass diese Initialisierung in der Befehlszeilenumgebung ausgeführt wird, geben Sie hier einfach zurück.
return;
}
// Alle 10 Sekunden ausführen
\Workerman\Timer::add(10, function () {
// Für eine einfachere Darstellung verwenden wir hier die Ausgabe anstelle des Meldungsvorgangs
echo memory_get_usage() . "\n";
});
}
}
Hinweis
Wenn das Framework im Befehlszeilenmodus verwendet wird, wird auch die inconfig/bootstrap.php
konfiguriertestart
-Methode ausgeführt. Wir können anhand vonworker
überprüfen, ob es sich um eine Befehlszeilenumgebung handelt, und so entscheiden, ob die Geschäftsinitialisierungslogik ausgeführt wird.
Konfiguration beim Start des Prozesses
Öffnen Sie config/bootstrap.php
und fügen Sie die MemReport
-Klasse zur Startsequenz hinzu.
return [
// ... Andere Konfigurationen werden hier ausgelassen...
app\bootstrap\MemReport::class,
];
Damit haben wir einen Geschäftsinitialisierungsprozess abgeschlossen.
Zusätzliche Hinweise
Benutzerdefinierte Prozesse führen die in config/bootstrap.php
konfigurierte start
-Methode ebenfalls aus. Durch Überprüfen von $worker->name
können wir feststellen, um welchen Prozess es sich handelt, und entscheiden, ob Ihr Geschäftsinitialisierungscode in diesem Prozess ausgeführt werden soll. Angenommen, wir müssen den monitor
-Prozess nicht überwachen, dann könnte der Inhalt von MemReport.php
wie folgt aussehen:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// Ist es eine Befehlszeilenumgebung?
$is_console = !$worker;
if ($is_console) {
// Wenn Sie nicht möchten, dass diese Initialisierung in der Befehlszeilenumgebung ausgeführt wird, geben Sie hier einfach zurück
return;
}
// Der Monitorprozess führt den Timer nicht aus
if ($worker->name == 'monitor') {
return;
}
// Alle 10 Sekunden ausführen
\Workerman\Timer::add(10, function () {
// Für eine einfachere Darstellung verwenden wir hier die Ausgabe anstelle des Meldungsvorgangs
echo memory_get_usage() . "\n";
});
}
}