HTTP တောင်းဆိုမှုများစွာကိုပြုလုပ်သောအခါ PHP မှပေးသော curl_multi_exec သည် PHP မှပေးသော curlti_exec သည်တစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုအကောင်အထည်ဖော်ရန်အတွက်ဘုံကိရိယာတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်၎င်းကိုအသုံးပြုသည့်အခါအဓိကအသေးစိတ်အချက်အလက်များကိုလျစ်လျူရှုထားသည် - curl_close ၏မှန်ကန်သောအချိန်ကိုက်။ အကယ်. မလျော်ကန်စွာအသုံးပြုပါက၎င်းသည်အရင်းအမြစ်ယိုစိမ့်မှုသို့ ဦး တည်သွားရုံသာမကမပြည့်စုံသောတောင်းဆိုမှုများနှင့်ပုံမှန်မဟုတ်သောတုံ့ပြန်မှုများကဲ့သို့သောပြ problems နာများကိုလည်းဖြစ်ပေါ်စေနိုင်သည်။ ဤဆောင်းပါးသည် curl_close function ကိုမှန်ကန်စွာမည်သို့မှန်ကန်စွာအသုံးပြုနိုင်မည်ကိုအသေးစိတ်ရှင်းပြပြီးထိရောက်သောတည်ငြိမ်မှုနှင့်တည်ငြိမ်သောအစုအဝေးကိုအောင်မြင်ရန် curl_multi_exec နှင့်ပူးပေါင်းဆောင်ရွက်ရန်။
curl_multi_exec သည် Php Curl extension မှပေးသောလုပ်ငန်းဆောင်တာများထဲမှတစ်ခုဖြစ်သည်။ ရိုးရာအမှတ်စဉ်တောင်းဆိုမှုများနှင့်နှိုင်းယှဉ်လျှင်၎င်းသည်အပြောင်းအလဲအတွက်စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။
developer အတော်များများသည် curl_close ($ ch) ကို ချက်ချင်းခေါ်ဆိုခြင်းမမှန်ကန်ပါ။ curl_mamulti_exec ကိုအသုံးပြုပြီး တစ်ပြိုင်နက်တည်းမော်ဒယ်တွင် -
$mh = curl_multi_init();
$chs = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
$chs[] = $ch;
// လမ်းပြောင်းပြန်:ဒီကိုမခေါ်ပါနဲ့ curl_close
// curl_close($ch);
}
curl_multi_exec နှင့် curl_close ကို မှန်ကန်စွာအသုံးပြုခြင်း၏ဖြစ်စဉ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
Multi လက်ကိုင်ကိုစတင်ရန်,
မျိုးစုံဆံပင်ကောက်ကောက်လက်ကိုင်များကိုဖန်တီးပြီးရွေးချယ်စရာများကိုသတ်မှတ်ပါ။
အဆိုပါ multi ကိုင်တွယ်ရန်ဆံပင်ကောက်ကောက်ထည့်ပါ;
တောင်းဆိုမှုကို execute;
ကိုင်တွယ်သူများကိုတ ဦး တည်းဖြင့်ဖယ်ရှားပြီး curl_close ဟုခေါ်ပါ။
Multi လက်ကိုင်ကိုပိတ်ပါ။
ဤတွင်ပြည့်စုံပြီးမှန်ကန်သောဥပမာတစ်ခုဖြစ်သည်။
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3',
];
$mh = curl_multi_init();
$handles = [];
$responses = [];
// 1. တစ်ခုချင်းစီကိုဖန်တီးနှင့် configure curl လက်ကိုင်
foreach ($urls as $i => $url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
curl_multi_add_handle($mh, $ch);
$handles[$i] = $ch;
}
// 2. တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
$running = null;
do {
$status = curl_multi_exec($mh, $running);
if ($running) {
curl_multi_select($mh);
}
} while ($running && $status == CURLM_OK);
// 3. တုန့်ပြန်မှုကိုဖတ်ပြီးအရင်းအမြစ်များကိုသန့်ရှင်းပါ
foreach ($handles as $i => $ch) {
$responses[$i] = curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_close($ch); // အချိန်မှန်:တည်နေ handle ဖယ်ရှားခံရပြီးနောက်အနီးကပ်
}
curl_multi_close($mh);
// မလုပ်မနေရမဟုတ်သော:ထုတ်ယူခြင်းအချက်အလက်များကိုထုတ်ယူခြင်း
foreach ($responses as $i => $body) {
echo "Response #$i: " . substr($body, 0, 100) . PHP_EOL;
}
ကြိုတင်ပြင်ဆင်မှုကို curl လက်ကိုင်ကိုမပိတ်ပါနှင့် ။ တောင်းဆိုမှုကိုကွပ်မျက်ခံရပြီး curl_close မခေါ်မီ Multi Multi Multi Multi Multi Multi Multi Multi Multi မှဖယ်ရှားပစ်ရန်သေချာစေရမည်။
curl_multi_select သည်စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက်သော့ချက်ဖြစ်ပြီး CPU idling ကိုတားဆီးနိုင်သည်။
လက်ကိုင်အားလုံးကိုအဆုံးတွင်စနစ်တကျဖြည့ ် စွက် သင့်သည်။
အသုံးပြုသော URL domain name ကိုပုံသေသတ်မှတ်ထားပါက၎င်းကို Unified configuration သို့မဟုတ် variable အစားထိုးမှတဆင့် Centrally စီမံနိုင်သည်။
$domain = 'gitbox.net';
$url = "https://{$domain}/api/endpoint";
Curl_multi_exec နှင့် curl_clos ၏အသုံးပြုမှုအချိန်ကိုမှန်ကန်စွာစီမံခြင်းဖြင့် PHP Batch HTTP တောင်းဆိုမှုအပြောင်းအလဲအတွက်စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုများစွာတိုးတက်စေနိုင်သည်။ ဤလုပ်ငန်းစဉ်သည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းသောအချက်အလက်ကောက်ယူခြင်း, API စုစည်းခြင်းနှင့်အခြား application အခြေအနေများအတွက်သင့်တော်သည်။ PHP developer တိုင်းသည်ကျွမ်းကျင်ရန်ထိုက်တန်သောကျွမ်းကျင်မှုတစ်ခုဖြစ်သည်။