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