Inicialização do Negócio
Às vezes, precisamos realizar algumas inicializações de negócio após o início do processo. Essa inicialização é executada apenas uma vez durante o ciclo de vida do processo, por exemplo, configurar um temporizador após o início do processo ou inicializar a conexão com o banco de dados. Abaixo, explicaremos isso.
Princípio
De acordo com a descrição em Fluxo de Execução, o webman carregará as classes definidas em config/bootstrap.php
(incluindo config/plugin/*/*/bootstrap.php
) após o início do processo e executará o método start das classes. Podemos adicionar o código de negócio no método start para completar a operação de inicialização de negócios após o início do processo.
Fluxo
Suponha que queremos criar um temporizador para reportar periodicamente o uso de memória do processo atual. Vamos nomear esta classe de MemReport
.
Comando de Execução
Execute o comando php webman make:bootstrap MemReport
para gerar o arquivo de inicialização app/bootstrap/MemReport.php
Dica
Se você não instalou owebman/console
, execute o comandocomposer require webman/console
para instalá-lo.
Editando o Arquivo de Inicialização
Edite app/bootstrap/MemReport.php
para que o conteúdo seja semelhante ao seguinte:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// É um ambiente de linha de comando?
$is_console = !$worker;
if ($is_console) {
// Se você não quiser que o ambiente de linha de comando execute esta inicialização, retorne aqui diretamente
return;
}
// Execute a cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para facilitar a demonstração, usamos a saída em vez do processo de relatório
echo memory_get_usage() . "\n";
});
}
}
Dica
Ao usar a linha de comando, o framework também executará o método start configurado emconfig/bootstrap.php
. Podemos determinar se estamos em um ambiente de linha de comando verificando se$worker
é nulo, e assim decidir se devemos executar o código de inicialização do negócio.
Configurando para Iniciar com o Processo
Abra config/bootstrap.php
e adicione a classe MemReport
aos itens de inicialização.
return [
// ...outras configurações omitidas...
app\bootstrap\MemReport::class,
];
Assim, completamos um fluxo de inicialização de negócio.
Explicações Complementares
A inicialização de processos personalizados também executará o método start configurado em config/bootstrap.php
. Podemos usar $worker->name
para determinar que tipo de processo é o atual e, posteriormente, usar $worker->id
para verificar qual processo é, decidindo assim se o código de inicialização do negócio deve ser executado nesse processo. Por exemplo, se precisamos executar apenas no processo 0 do webman, o conteúdo de MemReport.php
ficaria semelhante a isso:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// É um ambiente de linha de comando?
$is_console = !$worker;
if ($is_console) {
// Se você não quiser que o ambiente de linha de comando execute esta inicialização, retorne aqui diretamente
return;
}
// Execute apenas no processo 0 do webman
if ($worker->name != 'webman' && $worker->id != 0) {
return;
}
// Execute a cada 10 segundos
\Workerman\Timer::add(10, function () {
// Para facilitar a demonstração, usamos a saída em vez do processo de relatório
echo memory_get_usage() . "\n";
});
}
}