Curl ဆိုသည်မှာကွန်ရက်တောင်းဆိုမှုများအတွက် PHP ကိုအသုံးပြုသောအခါအသုံးအများဆုံးကိရိယာများအနက်မှတစ်ခုဖြစ်သည်။ အထူးသဖြင့်အသုတ်ဆွဲခြင်း API interface interface ကိုဆွဲခြင်း , အကြောင်းကြားစာများကိုတွန်းအားပေးခြင်း, နှင့်ဤအလေ့အကျင့်များတွင်မကြာခဏဆွေးနွေးသောမေးခွန်းတစ်ခုမှာ -
၎င်းသည်အသေးစိတ်သေးငယ်သည့်အသံဖြစ်သော်လည်းမြင့်မားသောတစ်ပြိုင်နက်တည်းဖြစ်ရပ်များတွင်ဤအသေးစိတ်သည်သင်၏ပရိုဂရမ်သည်တည်ငြိမ်စွာလည်ပတ်နိုင်ခြင်းရှိမရှိ၏သော့ချက်ဖြစ်လာနိုင်သည်။
curl_close ($ ch) သည် PHP ရှိ function တစ်ခုဖြစ်ပြီး curl_init () ကလက်ကိုင် ဒေါ်လာ CH ကို ပိတ်ပစ်လိုက်သည်။ ရိုးရိုးလေးပြောရရင်ဒါကသက်ဆိုင်ရာအရင်းအမြစ်တွေကိုထုတ်ပေးလိမ့်မယ်။ များစွာသောသင်ခန်းစာများနှင့်စာရွက်စာတမ်းများသည် "အသုံးပြုပြီးနောက်ပိတ်ရန်သတိရပါ" ဟုအလေးအနက်ထားပါလိမ့်မည်။
သို့သော် အကြီးစားတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများတွင် အရင်းအမြစ်များကိုမကြာခဏပြောင်းလဲခြင်းသည်ပိုမိုထိရောက်သောနည်းလမ်းများဖြစ်သည်။
developer အတော်များများက curl_close () ဟုခေါ်သောနေသမျှကာလပတ်လုံး Memory ကိုစနစ်သို့ချက်ချင်းပြန်လွှတ်ပေးလိမ့်မည်ဟုယုံကြည်ကြသည်။ PHP တွင်အထူးသဖြင့်ရှည်လျားသောဆက်သွယ်မှု scripts (သို့) FPM နေထိုင်သူမှတ်ဉာဏ်တွင် PHP ၏မှတ်ဉာဏ်စီမံခန့်ခွဲမှုယန္တရားသည် Memory System သို့ချက်ချင်းပြန်ပို့နိုင်သော်လည်းနောက်တစ်ကြိမ်တွင်၎င်းကိုအမှတ်အသားပြုလိမ့်မည်မဟုတ်ဘဲနောက်တစ်ကြိမ်စောင့်ဆိုင်းပါလိမ့်မည်။
ဆိုလိုသည်မှာသင့်တွင် curl_close ဟုခေါ်သောအခါ၌ပင်သင့် script တွင်ရာနှင့်ချီသောကောက်ကောက်သို့မဟုတ်ထောင်ပေါင်းများစွာသော ဆံပင်ကောက်စရာ တောင်းဆိုမှုများရှိပါက,
အောက်ဖော်ပြပါအချက်သည်ရိုးရှင်းသောနှိုင်းယှဉ်ချက်စမ်းသပ်မှုဖြစ်သည်။
// မြင်ကွင်း 1:မခေါ် curl_close
for ($i = 0; $i < 1000; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/test-endpoint?id=$i");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// ဂရုမစိုက်ခြင်း curl_close
}
// မြင်ကွင်း 2:တယ်လီဖုန်းဆက်ခြင်း curl_close
for ($i = 0; $i < 1000; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/test-endpoint?id=$i");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
Memory_Get_get_usage () နှိုင်းယှဉ်ခြင်းအားဖြင့်ကွပ်မျက်မှုဆိုင်ရာ script တစ်ခုတွင်အရေးအသားနည်းစနစ်နှစ်ခုတွင်မှတ်ဥာဏ်အသုံးပြုမှုတွင်နည်းပါးသည်။
သို့သော် FPM လက်အောက်တွင်အချိန်ကြာမြင့်စွာလည်ပတ်နေသော 0 န် ဆောင်မှုတစ်ခုတွင် curl_close () ကို မခေါ်ပါ။
curl_multi ကိုအသုံးပြုပြီးတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများသည်ကြီးမားသည်။ ၎င်းသည်တစ်ပြိုင်နက်တည်းကတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုအစပြုနိုင်အောင်ပြုလုပ်ပေးသည်။ Polling Mineisms များနှင့်ပိုမိုကောင်းမွန်သောသယံဇာတများဖြန့်ဖြူးခြင်းအားဖြင့်ဖြစ်စဉ်များမှတစ်ဆင့်အကမ္ရှပါဖြစ်စဉ်ကိုပြန်လည်ထူထောင်ရန်ခွင့်ပြုသည်။
$multiHandle = curl_multi_init();
$curlHandles = [];
for ($i = 0; $i < 100; $i++) {
$ch = curl_init("https://api.gitbox.net/batch?id=$i");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[$i] = $ch;
}
// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
do {
$status = curl_multi_exec($multiHandle, $active);
curl_multi_select($multiHandle);
} while ($active);
// ရလဒ်နှင့်အနီးကပ်ရယူပါ
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);
နိဂုံးချုပ်သည် - curl_close () ကိုယ်နှိုက်သည်အထူးသဖြင့်တိုတောင်းသောတစ်သက်တာ scripts တွင်မှတ်ဥာဏ်ကိုသိသိသာသာအသုံးမပြုနိုင်ပါ။ သို့သော် မြင့်မားသောတစ်ပြိုင်နက်တည်း, နေထိုင်သူမှတ်ဉာဏ်နှင့်ရှည်လျားသောဘဝသံသရာ 0 န်ဆောင်မှုများတွင် curl_close () ကို မခေါ်ပါ။
ထို့ကြောင့်၎င်းသည်စွမ်းဆောင်ရည်ကောင်းမွန်မှု၏လျှို့ဝှက်ချက်မဟုတ်ပါ, သို့သော်၎င်းသည်သင်၏ပရိုဂရမ်အတွက် "သင်ပြေးနိုင်" ရန်အချက်ဖြစ်သည်။
ပုံမှန် Batch Script: curl + curl_close အကြံပြုသည်
မြင့်မားသောတစ်ပြိုင်နက်တည်းလုပ်ဆောင်မှု - curl_multi ကိုသုံးပါသို့မဟုတ် Coroutine Clients (ဥပမာ - gu gu + async)
ရှည်လျားသောဆက်သွယ်မှုဝန်ဆောင်မှု - curl_close အပါအ 0 င်အရင်းအမြစ်ဘဝသံသွယ်များကိုစီမံခန့်ခွဲရန်သေချာစေပါ
PHP FPM - မှတ်ဥာဏ်ရယူထားသောမှတ်ဉာဏ်အသုံးပြုမှုကိုအာရုံစိုက်ပါ,
အသေးစိတ်အချက်အလက်များတွင်သာစွမ်းဆောင်ရည်သည်ကျောက်ကဲ့သို့တည်ငြိမ်နိုင်သည်။ နောက်တစ်ခါသင်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုတစ်ခုကိုရေးပါကသင်ပြန်လှည့်ကြည့်ရှုခြင်းနှင့် curl_close () ကို မေ့သွားလာမလားကြည့်ပါ။