Componente de Monitoramento de Arquivos
Background:
Workerman é executado em memória constante, o que evita a leitura repetida do disco e a reinterpretação da compilação do PHP, a fim de alcançar o máximo desempenho. Portanto, após alterar o código do negócio, é necessário executar reload ou restart manualmente para que as alterações entrem em vigor.
Ao mesmo tempo, o Workerman oferece um serviço de monitoramento de atualizações de arquivos, que detecta atualizações de arquivos e executa automaticamente o reload, recarregando os arquivos PHP. Os desenvolvedores podem integrá-lo ao projeto e permitir que seja iniciado junto com ele.
Endereço de Download do Serviço de Monitoramento de Arquivos:
-
Versão sem dependências: https://github.com/walkor/workerman-filemonitor
-
Versão com dependência inotify: https://github.com/walkor/workerman-filemonitor-inotify (é necessário instalar a extensão inotify)
Diferença entre as duas versões:
A versão do endereço 1 utiliza o método de polling a cada segundo para verificar se o arquivo foi atualizado.
A versão do endereço 2 utiliza o mecanismo inotify do núcleo Linux, onde o sistema notifica o Workerman quando há uma atualização no arquivo.
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 lugar no seu projeto e obrigá-lo no script de inicialização.
O componente de monitoramento monitora por padrão o diretório Applications; se precisar alterar, você pode modificar a variável $monitor_dir no arquivo Applications/FileMonitor/start.php. É aconselhável que o valor de $monitor_dir seja um caminho absoluto.
Atenção:
- O sistema Windows não suporta reload e não pode usar este serviço de monitoramento.
- O monitoramento só funciona no modo de debug; no modo daemon, o monitoramento de arquivos não será executado (veja a explicação abaixo para o porquê de não suportar o modo daemon).
- Somente arquivos carregados após a execução de Worker::runAll podem ser atualizados em quente, ou seja, apenas arquivos carregados dentro de callbacks onXXX podem ser atualizados em quente.
Por que não suporta o modo daemon?
O modo daemon geralmente é utilizado em ambientes de produção. Quando uma versão é lançada em um ambiente formal, geralmente vários arquivos são publicados de uma só vez, e esses arquivos podem ter dependências entre si. Como levará um certo tempo para que vários arquivos sejam sincronizados no disco, pode haver momentos em que os arquivos no disco não estão completos. Se nesse momento o sistema detectar uma atualização de arquivo e executar reload, existe o risco de ocorrer um erro fatal devido a arquivos não encontrados.
Além disso, em ambientes formais, pode haver a necessidade de localizar bugs ao vivo. Se o código for editado e salvo diretamente, as mudanças entrarão em vigor imediatamente, o que pode resultar em erros de sintaxe que deixem o serviço online indisponível. O método correto seria salvar o código e, em seguida, verificar se há erros de sintaxe usando php -l yourfile.php antes de recarregar e atualizar o código em quente.
Se o desenvolvedor realmente precisar que o modo daemon tenha monitoramento de arquivos e atualização automática, pode modificar o código no Applications/FileMonitor/start.php, removendo a parte da condição de Worker::$daemonize.