Dateiüberwachungs-Komponente

Hintergrund:

Workerman läuft im Speicher und vermeidet wiederholtes Lesen von Festplatten und wiederholtes Interpretieren von PHP, um die höchste Leistung zu erzielen. Daher müssen Änderungen am Anwendungscode manuell neu geladen oder neu gestartet werden, um wirksam zu werden.

Workerman bietet gleichzeitig einen Dienst zur Überwachung von Dateiaktualisierungen an. Dieser Dienst führt automatisch ein Reload durch, sobald eine Dateiaktualisierung erkannt wird, und lädt die PHP-Dateien neu. Entwickler können ihn in ihr Projekt einfügen und er wird zusammen mit dem Projekt gestartet.

Download-Adresse für den Dateiüberwachungsdienst:

  1. Abhängigkeitsloser Version: https://github.com/walkor/workerman-filemonitor

  2. Inotify-Version: https://github.com/walkor/workerman-filemonitor-inotify (benötigt die Installation der inotify-Erweiterung)

Unterschiede zwischen den beiden Versionen:

Die Version unter Adresse 1 verwendet die Methode der einmal pro Sekunde durchgeführten Abfrage der Dateiänderungszeit, um festzustellen, ob eine Datei aktualisiert wurde.

Adresse 2 nutzt den inotify-Mechanismus des Linux-Kernels, bei dem das System Workerman proaktiv benachrichtigt, wenn eine Datei aktualisiert wird.

In der Regel reicht die erste, abhängigkeitlose Version aus.

Benutzungsmethode

Kopieren Sie das Verzeichnis Applications/FileMonitor in das Applications-Verzeichnis Ihres Projekts.

Wenn Ihr Projekt kein Applications-Verzeichnis hat, können Sie die Datei Applications/FileMonitor/start.php an einen beliebigen Ort in Ihrem Projekt kopieren und in Ihrem Startskript einfügen.

Die Überwachungskomponente überwacht standardmäßig das Applications-Verzeichnis. Wenn Sie dies ändern möchten, können Sie die Variable $monitor_dir in der Datei Applications/FileMonitor/start.php anpassen. Der Wert von $monitor_dir sollte idealerweise der absolute Pfad sein.

Hinweis:

  • Windows-Systeme unterstützen kein Reload und können diesen Überwachungsdienst nicht nutzen.
  • Es ist nur im Debug-Modus wirksam; im Daemon-Modus wird die Dateiüberwachung nicht ausgeführt (warum der Daemon-Modus nicht unterstützt wird, siehe die nachstehenden Erklärungen).
  • Nur Dateien, die nach dem Aufruf von Worker::runAll geladen werden, können live aktualisiert werden, oder nur Dateien, die im onXXX Callback geladen werden, können live aktualisiert werden.

Warum wird der Daemon-Modus nicht unterstützt?

Der Daemon-Modus ist im Allgemeinen der Modus für den Betrieb in der Produktionsumgebung. Bei der Veröffentlichung von Versionen in der Produktionsumgebung werden in der Regel mehrere Dateien gleichzeitig veröffentlicht, und diese Dateien können gegenseitige Abhängigkeiten haben. Da das gleichzeitige Synchronisieren mehrerer Dateien auf die Festplatte einige Zeit in Anspruch nimmt, kann es in einem bestimmten Moment vorkommen, dass nicht alle Dateien auf der Festplatte vorhanden sind. Wenn die Dateiüberwachung zu diesem Zeitpunkt eine Dateiänderung erkennt und ein Reload durchführt, besteht das Risiko eines schwerwiegenden Fehlers, da eine Datei möglicherweise nicht gefunden werden kann.

Darüber hinaus werden in der Produktionsumgebung manchmal Bugs direkt online behoben. Bei direkter Bearbeitung und Speicherung des Codes wird dieser sofort wirksam, was möglicherweise zu Syntaxfehlern führt, die den Online-Service unbrauchbar machen. Der richtige Ansatz wäre es, den Code nach dem Speichern mit php -l yourfile.php auf Syntaxfehler zu überprüfen, bevor das Code-Reload durchgeführt wird.

Wenn Entwickler jedoch unbedingt die Dateiüberwachung und automatische Aktualisierung im Daemon-Modus aktivieren möchten, können sie den entsprechenden Teil der Bedingung in der Datei Applications/FileMonitor/start.php entfernen, in dem Worker::$daemonize behandelt wird.