Componente de Monitoramento de Arquivos
Contexto:
O Workerman é executado em memória persistente, o que evita a leitura repetitiva de disco e a interpretação repetida e compilação do PHP, a fim de atingir o melhor desempenho. Portanto, as alterações no código do negócio precisam ser recarregadas ou reiniciadas manualmente para entrar em vigor.
Ao mesmo tempo, o Workerman fornece um serviço de monitoramento de atualização de arquivos que, ao detectar uma atualização de arquivo, automaticamente executa o recarregamento, recarregando os arquivos PHP. Os desenvolvedores podem incluí-lo no projeto e iniciá-lo junto com o projeto.
Links para download do serviço de monitoramento de arquivos:
-
Versão sem dependências: https://github.com/walkor/workerman-filemonitor
-
Versão dependente do inotify: https://github.com/walkor/workerman-filemonitor-inotify (requer a instalação da extensão inotify)
Diferenças entre as duas versões:
A versão do link 1 usa o método de consulta do tempo de atualização do arquivo a cada segundo para determinar se o arquivo foi atualizado.
A versão do link 2 utiliza o mecanismo do kernel Linux inotify, que notifica ativamente o Workerman quando o arquivo é atualizado no sistema.
Geralmente, a primeira versão sem dependências é suficiente.
Instruções de uso:
Copie o diretório Applications/FileMonitor para o diretório Applications do seu projeto.
Se o seu projeto não tiver um diretório Applications, você pode copiar o arquivo Applications/FileMonitor/start.php para qualquer local do seu projeto e requerer no script de inicialização.
Por padrão, o componente de monitoramento monitora o diretório Applications. Se for necessário alterar, é possível modificar a variável $monitor_dir
em Applications/FileMonitor/start.php, sendo recomendável que o valor de $monitor_dir
seja um caminho absoluto.
Observações:
- O sistema Windows não suporta recarregamento, portanto, este serviço de monitoramento não pode ser utilizado.
- Só funciona em modo de depuração; não será executado em modo daemon (veja a explicação abaixo sobre por que não é suportado em modo daemon).
- Apenas os arquivos carregados após a execução de Worker::runAll podem ser atualizados dinamicamente, ou seja, apenas os arquivos carregados nos callbacks onXXX podem ser atualizados dinamicamente.
Por que não é suportado em modo daemon?
O modo daemon geralmente é usado para a execução em ambientes de produção. Quando uma versão de produção é publicada, geralmente vários arquivos são publicados de uma vez, e esses arquivos podem ter dependências entre si. Como a sincronização de vários arquivos para o disco leva um certo tempo, pode haver um momento em que os arquivos no disco não estão completos. Se o monitoramento detectar uma atualização de arquivo e executar um recarregamento nesse momento, existe o risco de erros fatais devido à falta de arquivos.
Além disso, em ambientes de produção, às vezes é necessário depurar online. Se o código for editado e salvo diretamente, terá efeito imediato, podendo resultar em erros de sintaxe que tornam o serviço online indisponível. O método correto seria salvar o código, verificar se há erros de sintaxe usando php -l yourfile.php
, e então recarregar dinamicamente o código.
Se o desenvolvedor realmente precisar habilitar o monitoramento e a atualização automática de arquivos no modo daemon, é possível alterar o código em Applications/FileMonitor/start.php, removendo a verificação de Worker::$daemonize.