PHP တွင် curl_multi_ * function ကိုအသုံးပြုသောအခါ PHP တွင်လုပ်ဆောင်သည့်အခါ, ပရိုဂရမ်၏တစ်ပြိုင်နက်တည်းတိုးတက်စေရန်တစ်ချိန်တည်းတွင် HTTP တောင်းဆိုမှုများကိုစတင်နိုင်ပါသည်။ curl_multi_clock function ကိုတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအားလုံးကိုပိတ်ရန်အသုံးပြုသည်။
တောင်းဆိုမှုကိုဘယ်လိုသေချာစွာပိတ်နိုင်မလဲဆိုတာမဆွေးနွေးခင်မှာ Curl_multi_ * function function ကိုဘယ်လိုနားလည်ရမလဲဆိုတာကို ဦး စွာနားလည်ဖို့လိုတယ်။ curl_multi_ * စီးရီးလုပ်ဆောင်ချက်များသည်အဓိကအားဖြင့်ဖြစ်သည်။
curl_multi_init () - မျိုးစုံလက်ကိုင်ကိုအစဖွင့်ပါ။
curl_mamulti_add_handle () - လက်ကိုင်ကိုလက်ကိုင်ရန်ဆံပင်ကောက်ကောက်ကိုထည့်သည်။
curl_multi_exec () - တောင်းဆိုမှုများအားလုံးကိုလက်ကိုင်ပေါင်းစုံတွင်ထည့်သွင်းထားသည့်တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ။
curl_multi_getcontent () - သတ်မှတ်ထားသောလက်ကိုင်၏ပြန်လာသောအကြောင်းအရာကိုရရှိသည်။
curl_mamulti_close () - လက်ကိုင်များအားလုံးကိုပိတ်ပါ ။
ဤလုပ်ဆောင်ချက်များကိုတစ်ပြိုင်နက်တည်းတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုထိရောက်စွာကိုင်တွယ်ရန်တစ် ဦး နှင့်တစ် ဦး အပြန်အလှန်ချိတ်ဆက်ရန်မကြာခဏအသုံးပြုလေ့ရှိသည်။
တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုကိုင်တွယ်ရာတွင်အသုံးအများဆုံးပြ problems နာများထဲမှတစ်ခုမှာ curl_multi_close ဟုခေါ်သောအခါ, ထိုသို့ပြုလုပ်ခြင်းသည်သယံဇာတအရင်းအမြစ်ယိုစိမ့်မှုနှင့်အစီအစဉ်၏တည်ငြိမ်မှုကိုအကျိုးသက်ရောက်လိမ့်မည်။
များသောအားဖြင့်ပြ problem နာသည်အောက်ပါအခြေအနေများတွင်ပေါ်ပေါက်လာသည်။
curl_multi_exec သည် တောင်းဆိုမှုများအားလုံးကိုပြီးဆုံးမည်ဆိုက္ခာတွင်စစ်ဆေးရန်မေ့နေသည်။
curl_multi_close မတိုင်မီလက်ကိုင်တစ်ခုစီကိုမှန်ကန်စွာမဖယ်ရှားပါ။
မသင့်လျော်သောအရင်းအမြစ်စီမံခန့်ခွဲမှုသည်မကိုက်ညီသည့်ပိတ်သိမ်းမှုများပြုလုပ်နိုင်သည်။
curl_mamulti_close ကို အသုံးပြုသောအခါတောင်းဆိုမှုများအားလုံးကိုမှန်ကန်စွာပိတ်ထားရန်သေချာစေရန်အတွက်ဤအဆင့်များကိုလိုက်နာရန်လိုအပ်သည် -
ပထမ ဦး စွာကျွန်ုပ်တို့သည်မျိုးစုံလက်ကိုင်ကို အစပြု. တောင်းဆိုမှုတစ်ခုစီအတွက်သီးခြားဆံပင်ကောက်ကောက်ကိုအစပြုပေးသည်။
$mh = curl_multi_init(); // မျိုးစုံလက်ကိုင်အစပျိုး
$ch1 = curl_init("https://gitbox.net/api/endpoint1"); // ပထမတောင်းဆိုချက်
$ch2 = curl_init("https://gitbox.net/api/endpoint2"); // ဒုတိယတောင်းဆိုချက်
// မျိုးစုံကိုင်တွယ်ရန်တောင်းဆိုမှုကိုလက်ကိုင်ထည့်ပါ
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
နောက်တစ်ခုက curl_multi_exec ကို သုံးတယ်။
do {
$mrc = curl_multi_exec($mh, $active); // တောင်းဆိုမှုကို execute
if ($active) {
curl_multi_select($mh); // ဖြည့်စွက်ရန်တောင်းဆိုမှုကိုစောင့်ပါ
}
} while ($active && $mrc == CURLM_OK);
တောင်းဆိုမှုအားလုံးပြီးဆုံးသည်နှင့်တစ်ပြိုင်နက်ကျွန်ုပ်တို့သည်တောင်းဆိုမှုတစ်ခုစီ၏တုန့်ပြန်မှုအကြောင်းအရာများကိုရယူရန် curl_multi_getcontent ကို သုံးနိုင်သည်။
// တောင်းဆိုထားသောအကြောင်းအရာကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// တစ်ခုချင်းစီကိုလက်ကိုင်အနီးကပ်နှင့်ဖယ်ရှားလိုက်ပါ
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// တောင်းဆိုမှုတိုင်းကိုပိတ်ပါ
curl_close($ch1);
curl_close($ch2);
// နောက်ဆုံးအနေဖြင့်လက်ကိုင်မျိုးစုံကိုပိတ်ပါ
curl_multi_close($mh);
curl_multi_close ကို မခေါ်မီလက်ကိုင်များကိုမှန်ကန်စွာဖယ်ရှားပြီးလက်ကိုင်တစ်ခုစီကိုပိတ်ထားသည်။ ၎င်းသည်အရင်းအမြစ်ယိုစိမ့်မှုနှင့်မလိုအပ်သောမှတ်ဉာဏ်အသုံးပြုမှုကိုရှောင်ရှားသည်။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ကျွန်ုပ်တို့သည်အချို့သောတောင်းဆိုမှုပျက်ကွက်မှုများကြုံတွေ့ရနိုင်သည်။ ခြွင်းချက်အခြေအနေများတွင်လက်ကိုင်များကိုမှန်ကန်စွာပိတ်ထားနိုင်ရန်သေချာစေရန်ကွပ်မျက်စဉ်အတွင်းကွပ်မျက်စဉ်အတွင်းချွင်းချက်ဖြင့်ကိုင်တွယ်ခြင်းနှင့်အမှားကိုင်တွယ်မှုများပြုလုပ်ရန်အကြံပြုသည်။
// ခြွင်းချက်ကိုင်တွယ် add ထည့်ပါ
try {
// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကို execute မှ code(အပေါ်ကပြထားတဲ့အတိုင်း)
if ($mrc != CURLM_OK) {
throw new Exception("Error in curl_multi_exec: $mrc");
}
} catch (Exception $e) {
// ချွင်းချက်များနှင့်အနီးကပ်အရင်းအမြစ်များကိုဖမ်း
echo "Error: " . $e->getMessage();
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_close($ch1);
curl_close($ch2);
curl_multi_close($mh);
}
ဤနည်းအားဖြင့်အမှားတစ်ခုဖြစ်ပေါ်နေလျှင်ပင်အစီအစဉ်သည်အရင်းအမြစ်များကိုမှန်ကန်စွာသန့်ရှင်းစေနိုင်ဆဲဖြစ်သည်။
curl_multi_ * လုပ်ဆောင်ချက်များကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုခြင်းနှင့်အောက်ပါအချက်များအပြီးတွင် curl_multi_close သည် တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအားလုံးကိုမှန်ကန်စွာပိတ်နိုင်အောင်ပြုလုပ်နိုင်သည်။
curl_multi_close မခေါ်မီလက်ကိုင်တစ်ခုချင်းစီကိုသေချာစွာဖယ်ရှားပါ။
curl_multi_exec ကို အသုံးပြုသောအခါ, တောင်းခံရန်တောင်းဆိုမှုများအားလုံးကိုစောင့်ပါ။
unclized လက်ကိုင်များကိုရှောင်ရှားရန်သင့်လျော်စွာခြွင်းချက်များကိုကိုင်တွယ်ပါ။
ဤအကောင်းဆုံးသောအလေ့အကျင့်များမှတဆင့်ကျွန်ုပ်တို့သည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပိုမိုကောင်းမွန်စွာစီမံခန့်ခွဲနိုင်သည်, အရင်းအမြစ်များယိုစိမ့်မှုများကိုရှောင်ရှားနိုင်ပြီး code အားကြံ့ခိုင်ခြင်းနှင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။