مكون مراقبة الملفات
الخلفية:
Workerman هو خادم يعمل باستمرار في الذاكرة، ويمكن للخادم الدائم في الذاكرة تجنب قراءة القرص مرارًا وتكرارًا وتفسير وترجمة PHP مرارًا وتكرارًا من أجل تحقيق أقصى أداء. لذا، يتطلب تغيير رمز العمل بعد التحديث أو إعادة التشغيل يدويًا ليكون ساري المفعول.
في الوقت نفسه، يقدم Workerman خدمة رصد تحديث الملف الذي بمجرد اكتشاف تحديث في الملف، يقوم الخدمة تلقائيًا بإعادة التحميل، أي إعادة تحميل ملفات PHP. يمكن للمطورين تضمين هذه الخدمة في المشروع وتشغيلها مع بدء تشغيل المشروع.
روابط تنزيل خدمة مراقبة الملفات:
1- الإصدار غير التابع: https://github.com/walkor/workerman-filemonitor
2- الإصدار المعتمد على inotify: https://github.com/walkor/workerman-filemonitor-inotify
(يتطلب تثبيت إضافة inotify)
الفروق بين الإصدارين:
يستخدم الإصدار 1 طريقة استطلاع تحديث وقت الملف كل ثانية لتحديد ما إذا كان الملف قد تم تحديث،
أما الإصدار 2 فيستخدم آلية نواة Linux inotify، حيث تقوم النظام بإعلام Workerman تلقائيًا عند تحديث الملف.
غالبًا ما يكون من الواجب استخدام الإصدار غير التابع (الإصدار 1).
طريقة الاستخدام:
يمكن نسخ مجلد Applications/FileMonitor إلى مجلد Applications في مشروعك.
إذا لم يكن لديك مجلد Applications في مشروعك، يمكنك نسخ ملف start.php من Applications/FileMonitor إلى أي موقع آخر في مشروعك، ومن ثم تضمينه في سكريبت البدء.
يتم مراقبة المجلد الافتراضي للمكون هو مجلد Applications، وإذا احتجت لتغييره، يمكن تعديل متغير $monitor_dir
في ملف start.php في مجلد Applications/FileMonitor، حيث يُفضل أن يكون قيمة $monitor_dir
مسارًا مطلقًا.
تنبيه:
- لا يدعم نظام ويندوز إعادة التحميل، وبالتالي فإن هذه الخدمة غير متاحة على هذا النظام.
- لا تُفعّل مراقبة الملفات إلا في وضع التصحيح (debug mode)، ولا يتم تنفيذ مراقبة الملفات تحت وضع الخادم الدائم (daemon mode) للأسباب المذكورة أدناه.
- تستخدم عملية Worker::runAll بعد تحميل الملفات فقط لتحديث الكود بشكل حي. أو بمعنى آخر، يتم تحديث الملفات التي تُحمّل خلال استدعاء onXXX فقط.
لماذا لا يدعم وضع الخادم الدائم؟
يعد وضع الخادم الدائم عادةً وضع تشغيل للبيئة الإنتاجية. عند نشر الإصدار النهائي في البيئة الإنتاجية، عادةً ما يتم نشر ملفات متعددة في وقت واحد، وقد تكون هناك تبعيات بين الملفات أيضًا. نظرًا لأن تزامن ملفات متعددة على القرص يستغرق وقتًا معينًا، فإن هناك احتمال وجود ملفات ناقصة في وقت معين، وإذا كانت الخدمة تتتبع تحديث الملفات وتنفذ إعادة التحميل في هذه الحالة، فقد يواجه البرنامج خطأ فادح بسبب عدم وجود الملفات.
بالإضافة إلى ذلك، قد يكون هناك حاجة في بيئة الإنتاج إلى تحديد الأخطاء عبر الإنترنت في بعض الأحيان. إذا قمت بتحرير الكود مباشرة وحفظه، فسيتم تطبيقه على الفور، وقد يؤدي هذا إلى أخطاء في النحو تجعل الخدمة على الإنترنت غير متوفرة. الطريقة الصحيحة هي حفظ الكود ثم التحقق من عدم وجود أخطاء في النحو باستخدام php -l yourfile.php
، ومن ثم إعادة تحميل الكود بعد التأكد من عدم وجود أخطاء في النحو.
إذا كان لدى المطور حاجة حقيقية إلى تمكين مراقبة الملفات والتحديث التلقائي في وضع الخادم الدائم، يمكن تعديل كود start.php في المجلد Applications/FileMonitor عن طريق إزالة الشرط في قسم Worker::$daemonize.