Inicialización del negocio
A veces necesitamos realizar una inicialización del negocio después de que el proceso se inicie, esta inicialización se ejecuta solo una vez durante el ciclo de vida del proceso, por ejemplo, configurar un temporizador después del inicio del proceso o establecer una conexión de base de datos. A continuación, explicaremos esto.
Principio
Según la explicación en Flujo de ejecución, webman cargará las clases configuradas en config/bootstrap.php
(incluidas en config/plugin/*/*/bootstrap.php
) después de que el proceso se inicie, y ejecutará el método start de las clases. Podemos agregar código de negocio en el método start para completar la inicialización del negocio después del inicio del proceso.
Proceso
Supongamos que queremos crear un temporizador para informar periódicamente el uso de memoria actual del proceso. Esta clase se llamará MemReport
.
Ejecutar comando
Ejecutar el comando php webman make:bootstrap MemReport
para generar el archivo de inicialización app/bootstrap/MemReport.php
.
Consejo
Si webman no tiene instaladowebman/console
, ejecuta el comandocomposer require webman/console
para instalarlo.
Editar archivo de inicialización
Edite app/bootstrap/MemReport.php
con un contenido similar al siguiente:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// ¿Es un entorno de línea de comandos?
$is_console = !$worker;
if ($is_console) {
// Si no quieres que esta inicialización se ejecute en un entorno de línea de comandos, simplemente devuelve aquí.
return;
}
// Ejecutar cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para propósitos de demostración, aquí utilizamos la salida en lugar de un informe real.
echo memory_get_usage() . "\n";
});
}
}
Consejo
Cuando se usa la línea de comandos, el marco también ejecutará el método start configurado enconfig/bootstrap.php
. Podemos determinar si es un entorno de línea de comandos o no a través de la variable$worker
, y decidir si ejecutar el código de inicialización del negocio.
Configurar para el inicio del proceso
Abra config/bootstrap.php
y agregue la clase MemReport
a la lista de inicio.
return [
// ... Se omiten otras configuraciones...
app\bootstrap\MemReport::class,
];
De esta manera, completamos el proceso de inicialización del negocio.
Nota adicional
Después de que se inicia un proceso personalizado, también se ejecutará el método start configurado en config/bootstrap.php
. Podemos utilizar $worker->name
para determinar qué tipo de proceso es y luego decidir si ejecutar su código de inicialización del negocio. Por ejemplo, si no necesitamos monitorear el proceso "monitor", el contenido de MemReport.php
será similar al siguiente:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// ¿Es un entorno de línea de comandos?
$is_console = !$worker;
if ($is_console) {
// Si no quieres que esta inicialización se ejecute en un entorno de línea de comandos, simplemente devuelve aquí.
return;
}
// El proceso monitor no ejecuta un temporizador
if ($worker->name == 'monitor') {
return;
}
// Ejecutar cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para propósitos de demostración, aquí utilizamos la salida en lugar de un informe real.
echo memory_get_usage() . "\n";
});
}
}