البرمجة غير المتزامنة في PHP: دليل شامل للمبتدئين

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

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

ابدأ الدورة

مقدمة في البرمجة غير المتزامنة في PHP



تقليديًا، يعمل PHP في الوضع المتزامن: يتم تنفيذ كل طلب بشكل تسلسلي، سطرًا تلو الآخر. ومع ذلك، في تطوير الويب الحديث، هناك حاجة متزايدة لمعالجة مهام متعددة في وقت واحد - من إرسال رسائل البريد الإلكتروني إلى العمل مع WebSocket وAPI. البرمجة غير المتزامنة في PHP تسمح بحل هذه المهام بكفاءة، دون حظر تيار التنفيذ الرئيسي.



في هذا الدليل، سنشرح ما هي البرمجة غير المتزامنة، ولماذا هي مطلوبة، وكيف تبدأ في استخدامها في PHP. ستتعرف على الأدوات الرئيسية: Fiber، ReactPHP، Swoole والوظائف المدمجة للعمل مع coroutines.



ما هي البرمجة غير المتزامنة ولماذا هي مطلوبة؟



الكود المتزامن مقابل الكود غير المتزامن



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



// كود متزامن (حظر)$data = file_get_contents('https://api.example.com');echo "تم استلام البيانات: " . $data; // ننتظر حتى يتم التحميل

// كود غير متزامن (غير حظر)$promise = async_file_get_contents('https://api.example.com');echo "تم إرسال الطلب، يمكنك القيام بأمور أخرى...";$data = await($promise); // نحصل على النتيجة لاحقًا


مشاكل PHP المتزامن



  • حظر I/O: العمليات مع الملفات، قواعد البيانات أو طلبات الشبكة توقف تنفيذ السكريبت
  • أداء منخفض: كل طلب جديد يتطلب عملية أو مسار منفصل
  • مشاكل مع الوقت الفعلي: الدردشات، الإشعارات والبث المباشر تعمل بكفاءة منخفضة


مزايا النهج غير المتزامن



  • معالجة متزامنة لمئات وآلاف الاتصالات
  • توفير في الذاكرة وموارد الخادم
  • إمكانية إنشاء تطبيقات real-time
  • واجهات أكثر استجابة


الأدوات الرئيسية لـ PHP غير المتزامن



1. Coroutines و Fiber (PHP 8.1+)



بدءًا من PHP 8.1، ظهر دعم مدمج لـ Fiber - coroutines خفيفة الوزن. تسمح Fiber بإيقاف تنفيذ الدالة واستئنافها لاحقًا، دون حظر التيار الرئيسي.



<?php$fiber = new Fiber(function(): void {    $value = Fiber::suspend('first');    echo "تم الاستئناف بالقيمة: $value";});

$value = $fiber->start();echo "القيمة الأولية: $value"; // first$fiber->resume('second'); // تم الاستئناف بالقيمة: second?>


2. ReactPHP — Event Loop لـ PHP



ReactPHP هي مكتبة تنفذ البرمجة الموجهة بالأحداث (event loop). تسمح بإجراء عمليات إدخال/إخراج غير حظر.



<?phprequire 'vendor/autoload.php';

$loop = React\\EventLoop\\Loop::get();

$loop->addTimer(1.0, function () { echo "مرت ثانية واحدة";});

$loop->addTimer(2.0, function () { echo "مرت ثانيتان";});

echo "البداية...";$loop->run();?>


توفر ReactPHP أيضًا عملاء وخوادم HTTP غير متزامنة:



<?php$browser = new React\\Http\\Browser($loop);

$browser->get('https://api.example.com')->then( function (Psr\\Http\\Message\\ResponseInterface $response) { echo "الرد: " . $response->getBody(); }, function (Exception $e) { echo "خطأ: " . $e->getMessage(); });?>


3. Swoole — خادم غير متزامن عالي الأداء



Swoole هو امتداد لـ PHP يحوله إلى خادم غير متزامن كامل. يدعم coroutines، WebSocket، خوادم TCP/UDP وغيرها الكثير.



<?ph                

المدونات

توصيات الكتب