قوائم المهام في PHP: دليل كامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في قوائم المهام في PHP

\n\n

في تطوير الويب الحديث، غالبًا ما تنشأ مواقف تتطلب تنفيذ عمليات طويلة أو كثيفة الاستخدام للموارد دون إجبار المستخدم على الانتظار. على سبيل المثال: إرسال البريد الإلكتروني الجماعي، إنشاء تقارير PDF، معالجة الصور أو التكامل مع واجهات برمجة التطبيقات الخارجية. وهنا تأتي قوائم المهام (job queues) لإنقاذ الموقف - وهي إحدى الأدوات الرئيسية لمطور الواجهة الخلفية.

\n\n

قائمة المهام هي آلية تسمح بتأجيل تنفيذ عملية كثيفة الاستخدام للموارد في الخلفية، مما يحرر التدفق الرئيسي للتطبيق لمعالجة الطلبات الجديدة. في هذه المقالة، سنشرح بالتفصيل كيفية العمل مع قوائم المهام في PHP، بدءًا من المفاهيم الأساسية وصولاً إلى الأمثلة العملية.

\n\n

ما هي قائمة المهام ولماذا نحتاجها؟

\n\n

تخيل أن موقعك يحتاج إلى إرسال 1000 رسالة بريد إلكتروني بعد تسجيل المستخدم. إذا تم تنفيذ ذلك بشكل متزامن، فسيتم تحميل الصفحة لعدة دقائق. سيغادر المستخدم، وسيتم حظر الخادم. تحل قائمة المهام هذه المشكلة: يتم وضع مهمة إرسال الرسائل في قائمة الانتظار ومعالجتها بواسطة عامل خلفية، ويتلقى المستخدم الرد على الفور.

\n\n

المزايا الرئيسية لاستخدام قوائم المهام

\n
    \n
  • تحسين تجربة المستخدم - لا ينتظر المستخدم اكتمال العمليات الطويلة
  • \n
  • زيادة الأداء - يعالج الخادم الطلبات بشكل أسرع
  • \n
  • قابلية التوسع - يمكن إضافة عمال إضافيين لمعالجة قائمة الانتظار
  • \n
  • تحمل الأخطاء - في حالة الفشل، يمكن إعادة وضع المهام في قائمة الانتظار
  • \n
  • الجدولة - تنفيذ المهام في وقت محدد
  • \n
\n\n

هندسة قوائم المهام في PHP

\n\n

يتكون نظام قوائم المهام النموذجي من ثلاثة مكونات:

\n
    \n
  • المنتج (Producer) - جزء الكود الذي يضيف المهام إلى قائمة الانتظار
  • \n
  • قائمة الانتظار (Queue) - مخزن المهام (غالبًا ما يعتمد على Redis أو Beanstalkd أو قاعدة بيانات)
  • \n
  • العامل (Worker) - سكريبت يستمع باستمرار إلى قائمة الانتظار وينفذ المهام
  • \n
\n\n

في PHP، للعمل مع قوائم المهام، غالبًا ما تُستخدم المكتبات php-resque أو Laravel Queue (إذا كنت تعمل مع Laravel) أو enqueue/fs. سننظر في نهج عام يمكن تكييفه مع أي إطار عمل.

\n\n

مثال عملي: إنشاء قائمة مهام في PHP خالص

\n\n

لنقم بإنشاء نظام بسيط لقوائم المهام باستخدام Redis. قم بتثبيت Redis وامتداد phpredis أو استخدم predis/predis عبر Composer.

\n\n

الخطوة 1: إعداد البيئة

\n
composer require predis/predis
\n\n

الخطوة 2: إنشاء المنتج

\n

سيقوم المنتج بإضافة المهام إلى قائمة الانتظار. لننشئ ملف producer.php:

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Predis\\Client as RedisClient;\n\nclass JobProducer {\n    private $redis;\n    \n    public function __construct() {\n        $this->redis = new RedisClient([\n            'scheme' => 'tcp',\n            'host'   => '127.0.0.1',\n            'port'   => 6379,\n        ]);\n    }\n    \n    public function addJob(string $queueName, array $jobData): void {\n        $job = json_encode([\n            'id' => uniqid(),\n            'data' => $jobData,\n            'created_at' => time()\n        ]);\n        \n        // نستخدم RPUSH للإضافة إلى نهاية قائمة الانتظار\n        $this->redis->rpush("queue:{$queueName}", $job);\n        echo "تمت إضافة المهمة إلى قائمة الانتظار {$queueName}\\n";\n    }\n}\n\n// مثال على الاستخدام\n$producer = new JobProducer();\n$producer->addJob('emails', [\n    'to' => 'user@example.com',\n    'subject' => 'مرحبًا بك!',\n    'body' => 'شكرًا لتسجيلك...'\n]);\n?>
\n\n

الخطوة 3: إنشاء العامل

\n

العامل

المدونات

توصيات الكتب