PHP တွင် curl_multi_ * လုပ်ဆောင်ချက်များသည် curl_multi_add_handle နှင့် curl_mamti_exec နှင့်တွဲဖက်အသုံးပြုလေ့ရှိသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုလုပ်နိုင်သည်။ လက်ကိုင်ပေါင်းများစွာသို့ curl လက်ကိုင်များကိုထည့်ရန် curl_multi_add_handle ကို အသုံးပြုသောအခါ curl_multi_remove_handle သည် တောင်းဆိုမှုပြီးဆုံးပြီးနောက်လက်ကိုင်တစ်ခုစီမှလက်ကိုင်တစ်ခုစီကိုဖယ်ရှားနိုင်သည်။
$multiCurl = curl_multi_init();
$curlHandles = [];
// မျိုးစုံထည့်ပါcurlကိုင်တွယ်multiလက်ကိုင်၌တည်၏
for ($i = 0; $i < 5; $i++) {
$curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}
// တောင်းဆိုမှုကို execute
do {
$status = curl_multi_exec($multiCurl, $active);
} while ($active);
// တစ်ခုချင်းစီကိုလက်ကိုင်ဖယ်ရှားပါ
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
curl_multi_close($multiCurl);
အထက်ပါကုဒ်တွင် curl_multi_remove_handle မှတဆင့် curl လက်ကိုင်တစ်ခုချင်းစီကိုဖယ်ရှားပါ။ အရင်းအမြစ်များကိုမှန်ကန်စွာထုတ်ပြန်ခြင်းသည်မှန်ကန်စွာထုတ်ပြန်ခြင်းကိုမှန်ကန်စွာထုတ်ပေးသော်လည်းမကြာခဏဆိုသလို curlti_remove_handle ကို curlti_remove_Handle သည်အထူးသဖြင့်တောင်းဆိုမှုများအရေအတွက်မြင့်တက်လာသောအခါ,
Curl_multi_Remove_handle ကိုခေါ်သည့်အခါ PHP သည်အောက်ခြေရှိ Multi Multi Musti Musties ပြည်နယ်ကိုအဆင့်မြှင့်တင်ရန်လိုအပ်သည်။ ၎င်းသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအရေအတွက်ကြီးမားသည့်အခါ၎င်းသည်အချိန်ကုန်သောလည်ပတ်မှုတစ်ခုဖြစ်သည်။ တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးသွားသောအခါလက်ကိုင်ကိုဖယ်ရှားပြီး PHP သည် Multi-Thread ၏အခြေအနေသတင်းအချက်အလက်များကိုလုပ်ဆောင်ရန်နှင့်မွမ်းမံရန်လိုအပ်သည်။ မကြာခဏဆိုသလိုလက်ကိုင်များကိုဖယ်ရှားခြင်းသည်အောက်ပါစွမ်းဆောင်ရည်ပြ issues နာများကိုဖြစ်ပေါ်စေသည်။
မကြာခဏမှတ်ဉာဏ်စီမံခန့်ခွဲမှု - လက်ကိုင်များကိုဖယ်ရှားခြင်းဖြင့်မှတ်ဥာဏ်စီမံခန့်ခွဲမှုယန္တရားသည်အရင်းအမြစ်များကိုခွဲဝေချထားပေးရန်နှင့်လွှတ်ပေးရန်လိုအပ်သည်။
Lock နှင့် Thread ထပ်တူပြုခြင်း - curl_multi_remove_handle တွင် အပြိုင်တွင်တောင်းဆိုသည့်အခါချည်သည်ချည်ခြင်းလုပ်ငန်းများပါ 0 င်မည်ဖြစ်သည်။ မကြာခဏခေါ်ဆိုမှုများသည်ပြိုင်ဆိုင်မှုကိုသော့ခတ်ရန် ဦး ဆောင်လမ်းပြပေးနိုင်သည်။
Call stack ၏ရှုပ်ထွေးမှု - ခေါ်ဆိုမှုတစ်ခုစီသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတွင်မြင့်မားသောတစ်ပြိုင်နက်တည်းတွင်မြင့်မားသောအစုအဝေးတို့အားတိုးပွားစေသည်။
ထို့ကြောင့်ဤလုပ်ငန်းများကိုအလွယ်တကူပိုကောင်းအောင်ပြုလုပ်ခြင်းသည်စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက်အလွန်အရေးကြီးသည်, အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများလိုအပ်သည်။
တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက်ချက်ချင်း curl_multi_remove_handle ကို ဖုန်းဆက်မည့်အစားတောင်းဆိုမှုများပြီးဆုံးပြီးနောက်လက်ကိုင်ကိုတစ်ယူနီဖောင်းကိုဖယ်ရှားနိုင်သည်။ ၎င်းသည်မကြာခဏအရင်းအမြစ်များကိုအသစ်ပြောင်းခြင်းအသစ်များကိုရှောင်ရှားနိုင်ပြီးစွမ်းဆောင်ရည်ဆုံးရှုံးမှုများကိုလျှော့ချနိုင်သည်။
$multiCurl = curl_multi_init();
$curlHandles = [];
// မျိုးစုံထည့်ပါcurlလက်ကိုင်
for ($i = 0; $i < 5; $i++) {
$curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}
// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
do {
$status = curl_multi_exec($multiCurl, $active);
} while ($active);
// 统一移除所有လက်ကိုင်
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
curl_multi_close($multiCurl);
တောင်းဆိုမှုများအားလုံးကိုပြီးစီးပြီးပြီးဆုံးသွားသောအခါတူညီသောလက်ကိုင်များကိုဖယ်ရှားခြင်းအားဖြင့်မလိုအပ်သောအလယ်အလတ်စစ်ဆင်ရေးများကိုလျှော့ချနိုင်ပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်အောင်လုပ်နိုင်သည်။
အချို့သောအခြေအနေများတွင်ကျွန်ုပ်တို့သည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုပြင်ခြင်းအားဖြင့် curl_multi_remove_handle ကို curl_multi_remove_handle ကို လျှော့ချနိုင်သည်။ ဥပမာအားဖြင့်, တောင်းဆိုမှုများအားလုံး၏အပြောင်းအလဲနဲ့အသုတ်, ပြီးနောက်အသုတ်ပြီးစီးအရသိန်းလုံးကိုတစ်ပုံစံတည်းဖယ်ရှားလိုက်ပါ။
$multiCurl = curl_multi_init();
$curlHandles = [];
// တစ်ခုအပြောင်းအလဲနဲ့ယူဆ10တောင်းဆိုချက်
$batchSize = 10;
for ($i = 0; $i < 100; $i++) {
$curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
curl_multi_add_handle($multiCurl, $curlHandles[$i]);
if (count($curlHandles) == $batchSize) {
// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
do {
$status = curl_multi_exec($multiCurl, $active);
} while ($active);
// 统一移除当前批次的所有လက်ကိုင်
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
// 清空当前批次的လက်ကိုင်数组
$curlHandles = [];
}
}
// ကျန်ရှိနေသေးသောတောင်းဆိုမှုများရှိနေသေးလျှင်,ဆက်လက်လုပ်ဆောင်ရန်ဆက်လက်
if (count($curlHandles) > 0) {
do {
$status = curl_multi_exec($multiCurl, $active);
} while ($active);
// 统一移除剩余လက်ကိုင်
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
}
curl_multi_close($multiCurl);
တောင်းဆိုမှုများကိုအသုံးပြုခြင်းဖြင့်အပြည့်အစုံဖြင့် curl_multi_remove_handle ၏ခေါ်ဆိုမှုအရေအတွက်သည်အလွန်နည်းပါးခြင်း, စွမ်းဆောင်ရည်တိုးတက်အောင်လုပ်နိုင်သည်။
အချို့ဖြစ်ရပ်များတွင်သင်သည်တူညီသော API ဟုမကြာခဏခေါ်ဆိုပါက HTTP Persistent Connections (Keep-Live) ကိုဖွင့်ရန်စဉ်းစားနိုင်သည်။ ၎င်းသည် connection အသစ်တစ်ခုကိုအချိန်တိုင်းဆက်နွယ်မှုအသစ်တစ်ခုကိုတည်ဆောက်ခြင်းထက်အဆက်မပြတ်ဆက်သွယ်မှုကိုတောင်းခံရန်ကြုံတွေ့ရသည် ။
ဆက်သွယ်မှုအသစ်တစ်ခုကိုတောင်းဆိုမှုတစ်ခုစီအတွက် connection အသစ်တစ်ခုကိုသေချာစေရန် curlopt_forbid_euse ကို မှန်ကန်စွာ သတ်မှတ်ခြင်းဖြင့် Connection Reuse Disable လုပ်နိုင်သည်။ ချိတ်ဆက်မှုသည်မခုတ်ဘဲထားခြင်းကိုထိန်းသိမ်းခြင်းသည်များသောအားဖြင့်အထူးလိုအပ်ချက်များမရှိဘဲစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Connection: keep-alive',
]);
ဆက်နွယ်မှုများဆက်ရှိနေခြင်းအားဖြင့်ဆက်သွယ်မှုနှင့်ဖျက်ဆီးခြင်း၏ကြိမ်နှုန်းကိုလျှော့ချပြီးစွမ်းဆောင်ရည်တိုးတက်အောင်ပြုလုပ်သည်။
သင်၏တောင်းဆိုမှုအတိုးအကျယ်သည်အလွန်ကြီးမားပါက PHP ကဆံပင်ကောက်ကောက်သည်အကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပါ။ ဤကိစ္စတွင်, အဆင့်မြင့် http client များကို အသုံးပြု. ခေတ်မီ http client များကို အသုံးပြု. ပိုမိုကောင်းမွန်သောစွမ်းဆောင်ရည်နှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုများကို အသုံးပြု. များသော အားဖြင့်ပိုမိုကောင်းမွန်သောစွမ်းဆောင်ရည်နှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုကဲ့သို့သောခေတ်မီ http client များကိုအသုံးပြုသည်။