Composant de surveillance des fichiers

Contexte :

Workerman fonctionne en mémoire résidente, ce qui permet d'éviter la lecture répétée du disque et la recompilation de PHP, afin d'atteindre des performances maximales. Ainsi, après avoir modifié le code métier, il est nécessaire de le recharger ou de le redémarrer manuellement pour que les modifications prennent effet.

En même temps, workerman fournit un service de surveillance des mises à jour de fichiers. Ce service, lorsqu'il détecte une mise à jour de fichier, exécute automatiquement un reload pour recharger les fichiers PHP. Les développeurs peuvent l'intégrer dans leur projet et le démarrer avec le projet.

Adresse de téléchargement du service de surveillance des fichiers :

  1. Version sans dépendances : https://github.com/walkor/workerman-filemonitor

  2. Version dépendante de inotify : https://github.com/walkor/workerman-filemonitor-inotify (nécessite l'installation de l'extension inotify)

Différences entre les deux versions :

La version de l'adresse 1 utilise une méthode de sondage des horodatages des fichiers une fois par seconde pour déterminer si un fichier a été mis à jour,

La version de l'adresse 2 utilise le mécanisme inotify du noyau Linux, qui notifie proactivement workerman lorsque des fichiers sont mis à jour.

En général, il suffit d'utiliser la première version sans dépendances.

Méthode d'utilisation

Il suffit de copier le répertoire Applications/FileMonitor dans le répertoire Applications de votre projet.

Si votre projet n'a pas de répertoire Applications, vous pouvez copier le fichier Applications/FileMonitor/start.php n'importe où dans votre projet, puis l'inclure dans votre script de démarrage.

Le composant de surveillance surveille par défaut le répertoire Applications. Si vous avez besoin de modifier ce comportement, vous pouvez ajuster la variable $monitor_dir dans le fichier Applications/FileMonitor/start.php. Il est conseillé que la valeur de $monitor_dir soit un chemin absolu.

Attention :

  • Le système Windows ne supporte pas le reload et ce service de surveillance ne peut pas être utilisé.
  • Il ne fonctionne qu'en mode debug, et la surveillance des fichiers n'est pas exécutée en mode daemon (pourquoi le mode daemon n'est pas pris en charge, voir l'explication ci-dessous).
  • Seuls les fichiers chargés après l'exécution de Worker::runAll peuvent être mis à jour à chaud, ou plutôt, seuls les fichiers chargés dans les rappels onXXX peuvent être mis à jour à chaud.

Pourquoi le mode daemon n'est-il pas supporté ?

Le mode daemon est généralement utilisé dans les environnements de production en ligne. Lors de la publication d'une version dans un environnement de production, plusieurs fichiers sont généralement publiés en même temps, et ces fichiers peuvent également avoir des dépendances. Comme il faut un certain temps pour synchroniser plusieurs fichiers sur le disque, il peut y avoir un moment où les fichiers sur le disque sont incomplets. Si, à ce moment-là, une mise à jour de fichier est détectée et que le reload est exécuté, il y a un risque d'erreur fatale due à des fichiers manquants.

De plus, il arrive parfois qu'il soit nécessaire de localiser des bugs en ligne dans un environnement de production. Si le code est directement modifié et enregistré, les modifications prendront immédiatement effet, ce qui pourrait entraîner des erreurs de syntaxe rendant le service en ligne indisponible. La bonne méthode consiste à enregistrer le code, puis à vérifier s'il y a des erreurs de syntaxe avec php -l yourfile.php avant de faire un reload pour mettre à jour le code.

Si un développeur a vraiment besoin d'activer la surveillance de fichiers en mode daemon et les mises à jour automatiques, il peut modifier le code dans Applications/FileMonitor/start.php en supprimant la condition de la partie Worker::$daemonize.