Componente de monitoreo de archivos

Fondo:

Workerman se ejecuta en memoria residente, lo que evita la lectura repetida del disco y la interpretación y compilación repetida de PHP, con el fin de lograr el máximo rendimiento. Por lo tanto, después de cambiar el código de negocio, es necesario hacer reload o restart manualmente para que tenga efecto.

Al mismo tiempo, Workerman proporciona un servicio de monitoreo de actualizaciones de archivos que, al detectar una actualización de archivo, ejecuta automáticamente un reload para volver a cargar el archivo PHP. Los desarrolladores pueden incluirlo en el proyecto para que se inicie con el proyecto.

Dirección de descarga del servicio de monitoreo de archivos:

  1. Versión sin dependencias: https://github.com/walkor/workerman-filemonitor

  2. Versión con dependencia de inotify: https://github.com/walkor/workerman-filemonitor-inotify (se necesita instalar la extensión inotify)

Diferencias entre las dos versiones:

La versión en la dirección 1 utiliza un método de sondeo para comprobar la hora de actualización del archivo cada segundo.

La dirección 2 utiliza el mecanismo de inotify del núcleo de Linux, que notifica activamente a Workerman cuando hay una actualización de archivo.

Generalmente, se puede usar la primera versión sin dependencias.

Método de uso

Simplemente copie el directorio Applications/FileMonitor en el directorio Applications de su proyecto.

Si su proyecto no tiene un directorio Applications, puede copiar el archivo Applications/FileMonitor/start.php en cualquier lugar de su proyecto y requerirlo en su script de inicio.

El componente de monitoreo monitorea de forma predeterminada el directorio Applications. Si necesita cambiar esto, puede modificar la variable $monitor_dir en Applications/FileMonitor/start.php. Se sugiere que el valor de $monitor_dir sea una ruta absoluta.

Nota:

  • El sistema Windows no soporta reload, por lo que no se puede usar este servicio de monitoreo.
  • Solo tiene efecto en modo debug, el monitoreo de archivos no se ejecutará en modo daemon (por qué no se soporta el modo daemon se explica a continuación).
  • Solo los archivos cargados después de que Worker::runAll se ejecute pueden actualizarse en caliente, o en otras palabras, solo los archivos cargados en las callbacks onXXX pueden actualizarse en caliente.

¿Por qué no se soporta el modo daemon?

El modo daemon generalmente se utiliza para operar en entornos de producción. Cuando se publica un nuevo software en el entorno de producción, generalmente se publican varios archivos a la vez, y puede haber dependencias entre los archivos. Como varios archivos necesitan un tiempo determinado para sincronizarse en el disco, en algún momento podría haber una situación en la que no todos los archivos estén presentes en el disco. Si en ese momento se detecta una actualización de archivo y se ejecuta un reload, existe el riesgo de errores fatales debido a que no se pueden encontrar archivos.

Además, en entornos de producción, a veces se necesita depurar errores en línea. Si se edita directamente el código y se guarda, tendrá efecto inmediato, lo que puede provocar errores de sintaxis y hacer que el servicio en línea no esté disponible. El método correcto debería ser guardar el código y usar php -l yourfile.php para verificar si hay errores de sintaxis antes de hacer reload y actualizar el código en caliente.

Si un desarrollador realmente necesita habilitar el monitoreo de archivos y la actualización automática en modo daemon, puede modificar el código en Applications/FileMonitor/start.php y eliminar la parte de la condición que verifica Worker::$daemonize.