Dosya İzleme Bileşeni
Arka Plan:
Workerman, sürekli bellekte çalışan bir sistemdir; bu sayede diskten tekrar tekrar okuma ve PHP'nin tekrar yorumlanmasını önler, böylece en yüksek performansa ulaşılır. Bu nedenle, iş kodunu değiştirdikten sonra değişikliklerin etkili olması için manuel olarak reload veya restart yapılması gerekmektedir.
Aynı zamanda Workerman, dosya güncellemelerini izleyen bir hizmet sunar. Bu hizmet, bir dosya güncellemesi tespit ettiğinde otomatik olarak reload işlemi gerçekleştirir ve PHP dosyalarını yeniden yükler. Geliştiriciler bu hizmeti projelerine entegre ederek, proje başlatıldığında çalıştırabilirler.
Dosya İzleme Hizmeti İndirme Adresi:
-
Bağımsız versiyon: https://github.com/walkor/workerman-filemonitor
-
inotify bağımlı versiyon: https://github.com/walkor/workerman-filemonitor-inotify (inotify uzantısını yüklemek gerekir)
İki Versiyonun Farkı:
Adres 1 versiyonu, dosyanın güncellenip güncellenmediğini belirlemek için her saniye dosya güncelleme zamanını sorgulama yöntemini kullanmaktadır.
Adres 2, Linux çekirdeğinin inotify mekanizmasını kullanır; dosya güncellendiğinde sistem Workerman'a proaktif olarak bildirimde bulunur.
Genellikle, ilk bağımsız versiyon yeterli olacaktır.
Kullanım Yöntemi
Applications/FileMonitor dizinini projenizin Applications dizinine kopyalamanız yeterlidir.
Eğer projenizde Applications dizini yoksa, Applications/FileMonitor/start.php dosyasını projenizin herhangi bir yerine kopyalayabilir ve başlatma script'inizde require edebilirsiniz.
İzleme bileşeni varsayılan olarak Applications dizinini izlemektedir; eğer değişiklik yapmak isterseniz, Applications/FileMonitor/start.php dosyasındaki $monitor_dir değişkenini değiştirebilirsiniz; $monitor_dir değeri için mutlak yol kullanmanız önerilir.
Dikkat:
- Windows sistemleri reload'ı desteklemez, bu nedenle bu izleme hizmetini kullanamazsınız.
- Sadece debug modunda geçerlidir; daemon modunda dosya izleme işlemi gerçekleştirilmez (daemon modunu neden desteklemediği aşağıda açıklanmıştır).
- Sadece Worker::runAll çalıştırıldıktan sonra yüklenen dosyalar sıcak güncellemeye tabi tutulabilir; yani yalnızca onXXX geri çağrımında yüklenen dosyalar sıcak güncellemeye tabi tutulabilir.
Neden daemon modunu desteklemiyor?
Daemon modu, genellikle çevrimiçi üretim ortamında çalışan bir moddur. Üretim ortamında sürüm yayınlanırken genellikle bir defada birden fazla dosya yayınlanır ve dosyalar arasında bağımlılık olabilir. Birden fazla dosyanın diske eşitlenmesi bir miktar zaman alacağı için, belirli bir anda diskteki dosyaların tam olmaması durumu söz konusu olabilir; bu noktada dosya güncellemesi izlenirse ve reload işlemi gerçekleştirilirse, dosya bulunamadığı için kritik hata riski oluşabilir.
Ayrıca, üretim ortamında bazen çevrimiçi hata ayıklama yapılır; kod doğrudan düzenlenip kaydedildiğinde hemen etkili olur ve sözdizim hatası nedeniyle çevrimiçi hizmetin kullanılamaz hale gelme riski vardır. Doğru yöntem, kod kaydedildikten sonra, php -l yourfile.php komutuyla sözdizimi hatası olup olmadığını kontrol etmek ve sonra reload ile kodu sıcak güncellemektir.
Eğer geliştirici gerçekten daemon modunda dosya izlemeyi ve otomatik güncellemeyi açmak istiyorsa, Applications/FileMonitor/start.php kodunu bularak Worker::$daemonize kısmındaki kontrolü kaldırabilir.