PHP တွင် curl extensions များကိုအသုံးပြုသောအခါ curl_multi_ * သည်များသောအားဖြင့်တစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုကိုင်တွယ်ရန်အသုံးပြုလေ့ရှိသည်။ ဤလုပ်ဆောင်ချက်များသည်အထူးသဖြင့် HTTP တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းပေးပို့လိုက်သောအခါသင့်အစီအစဉ်၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။ သို့သော်, curl_multi_clockion function ကိုအသုံးပြုသောအခါအချို့သော developer များကတောင်းဆိုမှုများတွင် 0 င်ရောက်စွက်ဖက်မှုပြ problems နာများကြုံတွေ့ရနိုင်သည်။
ဤဆောင်းပါးသည်လက်တွေ့ကျကျကျင့်သုံးခြင်းနှင့်ဖြေရှင်းနည်းများကိုဝေမျှခြင်းတွင်ဝင်ရောက်စွက်ဖက်မှုကိုမည်သို့ရှောင်ရှားရမည်ကိုမည်သို့ရှောင်ရှားရမည်ကိုလေ့လာလိမ့်မည်။
PHP သည်တစ်ပြိုင်တည်း curl curl တောင်းဆိုမှုများကိုလုပ်ဆောင်ရန် curl_multi_ * function ကိုထောက်ပံ့ပေးသည်။ အဓိကလုပ်ဆောင်ချက်မှာ -
curl_multi_init () - မျိုးစုံလက်ကိုင်ကိုအစဖွင့်ပါ။
curl_mamulti_add_handle () - လက်ကိုင်တစ်ခုသို့ curl မျိုးစုံသောလက်ကိုင်များကိုထည့်ပါ။
curl_mamulti_exec () : curl တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ။
curl_mamulti_getcontent () - curl တောင်းဆိုမှု၏ content ကိုရယူပါ။
curl_multi_remove_handle () - လက်ကိုင်တစ်ခုမှဆံပင်ကောက်ကောက်ကိုဖယ်ရှားသည်။
curl_mamulti_close () : curl လက်ကိုင်အားလုံးကိုပိတ်ပြီးအရင်းအမြစ်များကိုဖြန့်ချိပါ။
<?php
$multiHandle = curl_multi_init();
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3'
];
$handles = [];
// မျိုးစုံတောင်းဆိုမှုလက်ကိုင်အစပျိုး
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$handles[] = $ch;
}
// တောင်းဆိုမှုကို execute
$running = null;
do {
curl_multi_exec($multiHandle, $running);
} while ($running);
// တုံ့ပြန်မှုဒေတာကိုရယူပါ
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
curl_multi_remove_handle($multiHandle, $ch);
}
// လက်ကိုင်ကိုပိတ်ပါ
curl_multi_close($multiHandle);
?>
curl_multi_cloco_close function သည်အဆင်ပြေ သော သန့်ရှင်းရေးလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ ဤ 0 င်ရောက်စွက်ဖက်မှုသည်အချို့သောတောင်းဆိုမှုများကိုမှန်ကန်စွာဖြည့်စွက်ရန်ပျက်ကွက်ခြင်းသို့မဟုတ်လက်ခံရရှိသည့်တုန့်ပြန်မှုမပြည့်စုံပါ။
တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများ၏ပြီးစီးချိန်သည်ကိုက်ညီမှုမရှိပါ ။ မတူညီသောတောင်းဆိုမှုများကိုမတူကွဲပြားသောတောင်းဆိုမှုကာလများကြောင့်အချို့သောတောင်းဆိုမှုများကိုမပြီးစီးနိုင်ပါ ။
အရင်းအမြစ်ဖြန့်ချိမှုဆိုင်ရာပြ issues နာများ - အချို့သောကိစ္စရပ်များတွင် curl_multi_close သည်သယံဇာတများကိုအပြည့်အဝဖြန့်ချိမီ Curl_multi_close သည်အခြားတောင်းဆိုမှုများကိုထိခိုက်စေနိုင်သည်သို့မဟုတ်ဆက်သွယ်မှုကိုအဆက်ပြတ်စေနိုင်သည်။
curl_multi_cloco_cloke function ကိုတောင်းဆိုခြင်းအတွက်တောင်းဆိုမှုကို 0 င်ရောက်စွက်ဖက်ခြင်းကိုရှောင်ရှားရန်ရှောင်ရှားရန်အောက်ပါနည်းဗျူဟာများကိုလက်ခံနိုင်သည်။
curl_multi_close မခေါ်မီတောင်းဆိုမှုများအားလုံးကိုပြီးစီးကြောင်းသေချာပါစေ။ curl_mamulti_exec မှပြန်လာသော လည်ပတ်မှု အဆင့်ကိုစစ်ဆေးခြင်းအားဖြင့်တောင်းဆိုမှုများအားလုံးကိုပြီးစီးခြင်းရှိမရှိအတည်ပြုနိုင်သည်။ curl_multi_close အားလုံးကိုတောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်မှသာဟုခေါ်သင့်သည်။
<?php
$multiHandle = curl_multi_init();
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3'
];
$handles = [];
// မျိုးစုံတောင်းဆိုမှုလက်ကိုင်အစပျိုး
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$handles[] = $ch;
}
// တောင်းဆိုမှုကို execute
$running = null;
do {
$mrc = curl_multi_exec($multiHandle, $running);
if ($mrc > 0) {
echo "CURL exec error: " . curl_multi_strerror($mrc);
}
} while ($running);
// တုံ့ပြန်မှုဒေတာကိုရယူပါ
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
curl_multi_remove_handle($multiHandle, $ch);
}
// လက်ကိုင်ကိုပိတ်ပါ
curl_multi_close($multiHandle);
?>
အချို့ဖြစ်ရပ်များတွင် curl_mamulti_select () () တောင်းဆိုမှုကိုအပြောင်းအလဲအတွက်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန်အသုံးပြုနိုင်သည်။ Curl_Multi_exec အစားအမြဲတမ်း 0 က်ဘ်ဆိုက်များကို အသုံးပြု. CPU အသုံးပြုမှုကိုလျှော့ချရန်နှင့်တောင်းဆိုမှုများကိုချောမွေ့စွာလုပ်ဆောင်ခြင်းကိုသေချာစေရန်စောင့်ဆိုင်းနေစဉ်လုပ်ငန်းစဉ်များကိုပိတ်ဆို့နိုင်သည်။
<?php
$multiHandle = curl_multi_init();
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3'
];
$handles = [];
// မျိုးစုံတောင်းဆိုမှုလက်ကိုင်အစပျိုး
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$handles[] = $ch;
}
// တောင်းဆိုမှုကို execute并使用 curl_multi_select စွမ်းဆောင်ရည်တိုးတက်ကောင်းမွန်အောင်
$running = null;
do {
$mrc = curl_multi_exec($multiHandle, $running);
if ($mrc > 0) {
echo "CURL exec error: " . curl_multi_strerror($mrc);
}
curl_multi_select($multiHandle);
} while ($running);
// တုံ့ပြန်မှုဒေတာကိုရယူပါ
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
curl_multi_remove_handle($multiHandle, $ch);
}
// လက်ကိုင်ကိုပိတ်ပါ
curl_multi_close($multiHandle);
?>
တောင်းဆိုမှုကို တောင်းဆိုခြင်းတွင် 0 င်ရောက်စွက်ဖက်ခြင်းကိုရှောင်ရှားရန်တောင်းဆိုမှုများအားလုံးကိုပြီးစီးပြီးတုန့်ပြန်မှုများကိုမှန်ကန်စွာပြန်ပို့ပေးရန်လိုအပ်သည်။ တောင်းဆိုမှု၏ကွပ်မျက်မှုအခြေအနေကိုသင်စောင့်ကြည့် နိုင်သည် ။
ဤနည်းလမ်းများမှတစ်ဆင့် PHP ရှိတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတည်ငြိမ်အေးချမ်းရေးနှင့်စွမ်းဆောင်ရည်ကိုထိထိရောက်ရောက်တိုးတက်အောင်လုပ်နိုင်သည်,