ကောက်ကောက်သည်ဒေတာများကိုဆာဗာများနှင့်လဲလှယ်ရန်ကိရိယာတစ်ခုဖြစ်သည်။ HTTP, HTTPS, FTP စသည်များအပါအ 0 င် protocols အမျိုးမျိုးကိုထောက်ပံ့သည်။ PHP ရှိ curl extension ကိုထောက်ပံ့သည်။
http တောင်းဆိုမှုများစွာအောင်သောအခါ curl ၏အရင်းအမြစ်များမှာအကန့်အသတ်ရှိသည်။ ထို့ကြောင့်ဤအရင်းအမြစ်များကိုတောင်းဆိုမှုပြီးဆုံးပြီးနောက်အချိန်မီထုတ်ပြန်ရမည်။ ဤသည် curl_close () function ကိုခေါ်ဆိုခြင်းဖြင့်အောင်မြင်သည်။ အကယ်. HTTP တောင်းဆိုမှုများကိုချိတ်ဆက်မှုမရှိဘဲကွင်းဆက်တစ်ခုတွင်မကြာခဏစတင်ပါက၎င်းသည်မှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်ဆာဗာ၏စွမ်းဆောင်ရည်ကိုပင်ဖြစ်စေလိမ့်မည်။
ကောက်ကောက်တောင်းခံသည့်အခါ, အောက်ပါအဆင့်များကိုကျွန်ုပ်တို့အများအားဖြင့်လိုက်နာသည်။
အဆိုပါဆံပင်ကောက်ကောက် session ကိုစတင်ပါ။
တောင်းဆိုမှုကို parameters တွေကိုသတ်မှတ်ပါ။
တောင်းဆိုမှုကို execute နှင့်တုံ့ပြန်မှုကိုရယူပါ။
ဆံပင်ကောက်ကောက် session ကိုပိတ်ပါ။
$ch = curl_init(); // ဖြစ်ပေါ်လာခြင်း cURL ရုံးထိုင်အချိန်ကာလ
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint"); // တောင်းဆိုမှုကို set up URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // တုန့်ပြန်အကြောင်းအရာကိုရယူပါ
$response = curl_exec($ch); // တောင်းဆိုမှုကို execute
curl_close($ch); // 关闭ရုံးထိုင်အချိန်ကာလ
တောင်းဆိုမှုများကို loop တစ်ခုတွင်မကြာခဏစတင်လေ့ရှိပါကတောင်းဆိုမှုတစ်ခုစီသည် connection information ကိုသိုလှောင်ရန်မှတ်ဉာဏ်ကိုခွဲဝေချထားပေးသည်။ ကွင်းဆက်တစ်ခုချင်းစီတွင်သင်ဆံပင်ကောက်ကောက်စာမပိတ်ပါကမှတ်ဉာဏ်ယိုစိမ့်မှုဖြစ်လိမ့်မည်။ ထိုသို့ပြုလုပ်ခြင်းသည် PHP scripts ကိုမှတ်ဉာဏ်များလွန်းစေနိုင်သည်, ၎င်းသည်နောက်ဆုံးတွင်စွမ်းဆောင်ရည်ပြ problems နာများနှင့်ဆာဗာတွင်ပင်ပျက်ကျလိမ့်မည်။
ဥပမာအားဖြင့်, curl session ကိုစနစ်တကျမပိတ်ဘဲကွင်းဆက်ရှိတောင်းဆိုမှုများကိုစုဆောင်းခြင်း,
// အမှားသရုပ်ပြ:ကွင်းဆက်ထဲမှာမပိတ်ဘူး cURL ရုံးထိုင်အချိန်ကာလ
for ($i = 0; $i < 1000; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
// ခေါ်ဆိုရန်မေ့လျော့ curl_close()
}
မှတ်ဉာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက် curl_close () function ကိုခေါ်ယူရန်သေချာစေရန်လိုအပ်သည်။ အလွယ်ကူဆုံးနည်းလမ်းမှာ curl_close () အတွင်း၌တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက်အရင်းအမြစ်များကိုဖြည့်ဆည်းပေးနိုင်ရန်ကွင်းဆက်အတွင်း၌ထားရန်ဖြစ်သည်။
// မှန်ကန်သောသရုပ်ပြ:ကွင်းဆက်အတွက်အနီးကပ် cURL ရုံးထိုင်အချိန်ကာလ
for ($i = 0; $i < 1000; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch); // 及时关闭ရုံးထိုင်အချိန်ကာလ
}
တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက် curl session ကိုပိတ်ခြင်းအားဖြင့် PHP Memory သည်ဖြုန်းတီးခြင်းမရှိတော့ပါ။ HTTP တောင်းဆိုမှုတစ်ခုစီအတွက်အရင်းအမြစ်များကိုအချိန်မီပြန်လွှတ်ပေးသည်။
တစ်ခုတည်းသောတောင်းဆိုမှုအမြောက်အများကိုကိုင်တွယ်ရာတွင် Single-Threaded Loops သည်အလွန်နှေးကွေးနိုင်သည်။ သင်တောင်းဆိုမှုများအမြောက်အများကိုကိုင်တွယ်ရန်လိုအပ်ပါက Execution ထိရောက်မှုကိုတိုးတက်စေရန်လိုအပ်ပါက (တစ်ပြိုင်နက်တည်း curl ဟုလည်းခေါ်ခြင်း) ကိုသင်စဉ်းစားနိုင်သည်။ ၎င်းသည်တောင်းဆိုမှုများ၏အချိန်ကိုအလွန်လျှော့ချနိုင်ပြီးမကြာခဏ i / o စစ်ဆင်ရေးကြောင့်ဖြစ်ရတဲ့ butcecks ကိုရှောင်ရှားနိုင်သည်။
// Multi-Threading ကိုအသုံးပြုခြင်း cURL စွမ်းဆောင်ရည်ကိုပိုကောင်းအောင်လုပ်ဖို့
$mh = curl_multi_init(); // ဖြစ်ပေါ်လာခြင်း cURL 多线程ရုံးထိုင်အချိန်ကာလ
$handles = [];
for ($i = 0; $i < 1000; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $ch); // တစ်ခုချင်းစီကိုထည့်ပါ cURL 句柄添加到多线程ရုံးထိုင်အချိန်ကာလ中
$handles[] = $ch;
}
// Multi- ချည်တောင်းဆိုမှုများကိုလုပ်ဆောင်ပါ
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($active > 0);
// အားလုံးပိတ်ပါ cURL ရုံးထိုင်အချိန်ကာလ
foreach ($handles as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh); // 关闭多线程ရုံးထိုင်အချိန်ကာလ
၎င်းသည်အဓိကအစီအစဉ်ကိုပိတ်ဆို့ခြင်းမရှိဘဲလုပ်ငန်းစဉ်တစ်ခု၏လုပ်ငန်းစဉ်များတွင်လုပ်ဆောင်ရန်တောင်းဆိုမှုများကိုပြုလုပ်ရန်ခွင့်ပြုသည်။