طلب تجعيد غير متزامن في 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