"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحقيق طلبات cURL غير المتزامنة في PHP؟

كيفية تحقيق طلبات cURL غير المتزامنة في PHP؟

تم النشر بتاريخ 2024-11-11
تصفح:155

How to Achieve Asynchronous cURL Requests in PHP?

طلب تجعيد غير متزامن في PHP

يمكن أن يمثل تنفيذ طلبات تجعيد متعددة في وقت واحد تحديًا في PHP. في هذه المقالة، سنستكشف طرقًا مختلفة لتحقيق التنفيذ غير المتزامن باستخدام الوظائف المضمنة والمكتبات الخارجية.

cURL multi-threading

تسمح وظائف curl_multi_* الخاصة بـ PHP للتنفيذ غير المتزامن لطلبات cURL المتعددة. إليك مثال:

curl_multi_init();
$mh = curl_multi_init();

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'http://example.com/endpoint');
curl_multi_add_handle($mh, $ch1);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, 'http://example.com/endpoint2');
curl_multi_add_handle($mh, $ch2);

$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

pthreads

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

class RequestThread extends Thread {
    public function run() {
        $ch = curl_init();
        // ... set cURL options here

        curl_exec($ch);
        curl_close($ch);
    }
}

$thread = new RequestThread();
$thread->start();

التنفيذ المتوازي باستخدام المكتبة

هناك أيضًا مكتبات مصممة خصيصًا للتنفيذ المتوازي في PHP، مثل الوظائف المتوازية والوظائف المتوازية طلب. فيما يلي مثال لاستخدام مكتبة الطلبات المتوازية:

use Parallel\{Task, Runtime};

$runtime = new Runtime;

$tasks = [
    new Task(function () {
        // ... cURL request 1
    }),
    new Task(function () {
        // ... cURL request 2
    }),
];

$runtime->run($tasks);

الاعتبارات

عند تنفيذ طلبات غير متزامنة، من المهم مراعاة حدود موارد الخادم والاختناقات المحتملة. ومن المهم أيضًا التعامل مع الأخطاء والاستثناءات التي قد تحدث أثناء التنفيذ.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3