Inicialización del Negocio
A veces necesitamos realizar alguna inicialización del negocio después de iniciar el proceso, siendo esta inicialización ejecutada solo una vez durante el ciclo de vida del proceso, como por ejemplo configurar un temporizador o inicializar una conexión a la base de datos. A continuación, explicaremos esto.
Principio
De acuerdo con la flujo de ejecución descrito, webman cargará las clases configuradas en config/bootstrap.php
(incluyendo config/plugin/*/*/bootstrap.php
) después de iniciar el proceso, y ejecutará el método start de estas clases. Podemos añadir el código del negocio en el método start, permitiendo así realizar la operación de inicialización del negocio después del inicio del proceso.
Flujo
Supongamos que queremos crear un temporizador que se encargue de informar periódicamente sobre el uso de memoria del proceso actual, y llamaremos a esta clase MemReport
.
Ejecutar el comando
Ejecuta el comando php webman make:bootstrap MemReport
para generar el archivo de inicialización app/bootstrap/MemReport.php
Sugerencia
Si tu webman no tiene instaladowebman/console
, ejecuta el comandocomposer require webman/console
para instalarlo.
Editar el archivo de inicialización
Edita 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 deseas que este inicializador se ejecute en el entorno de línea de comandos, retorna aquí
return;
}
// Ejecutar cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para facilitar la demostración, usamos la salida en lugar del proceso de informe
echo memory_get_usage() . "\n";
});
}
}
Sugerencia
Al usar la línea de comandos, el marco también ejecutará el método start configurado enconfig/bootstrap.php
, podemos determinar si estamos en un entorno de línea de comandos verificando si$worker
es null, y así decidir si ejecutar el código de inicialización del negocio.
Configuración al iniciar el proceso
Abre config/bootstrap.php
y añade la clase MemReport
a los elementos de inicio.
return [
// ... aquí se omiten otras configuraciones ...
app\bootstrap\MemReport::class,
];
Así hemos completado un flujo de inicialización del negocio.
Notas adicionales
El método start configurado en config/bootstrap.php
también se ejecutará cuando se inicie un proceso personalizado, podemos usar $worker->name
para determinar qué proceso es el actual, y más allá de eso, podemos usar $worker->id
para determinar qué número de proceso es, así decidimos si ejecutar tu código de inicialización del negocio en ese proceso, por ejemplo, si solo necesitamos ejecutarlo en el proceso 0 de webman, el contenido de MemReport.php
sería similar a lo 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 deseas que este inicializador se ejecute en el entorno de línea de comandos, retorna aquí
return;
}
// Ejecutar solo en el proceso 0 de webman
if ($worker->name != 'webman' && $worker->id != 0) {
return;
}
// Ejecutar cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para facilitar la demostración, usamos la salida en lugar del proceso de informe
echo memory_get_usage() . "\n";
});
}
}