PHP တွင် Curl_multi_ * လုပ်ဆောင်ချက်များသည်သင့်အား HTTP တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းပေးပို့သည်ကိုတစ်ပြိုင်နက်တည်းပေးနိုင်သည်။ သို့သော်လူအများစုက curl_multi_close ကိုသုံးသောအခါ,
အကယ်. အချိန်ကုန်သွားသောအချိန်သည်အချိန်ကြာမြင့်စွာတုံ့ပြန်မှုမရှိပါကတောင်းဆိုမှုသည်အချိန်ကြာမြင့်စွာတုံ့ပြန်မှုမရှိပါကလျှောက်လွှာတစ်ခုလုံးကိုမှီဝဲစေနိုင်သည်။ curl_multi_close ကို အသုံးပြုသောအခါအချိန်ကုန်ထိန်းချုပ်မှုကိုမည်သို့အကောင်အထည်ဖော်နိုင်မည်ကိုသင်ခန်းစာယူပါ။
စင်စစ်အားဖြင့် curl_multi_close ကို curl_mamulti လက်ကိုင်ကိုပိတ်ရန်သာအသုံးပြုသည်။ ၎င်းသည် အချိန်ကုန်ကိုမထိန်းချုပ်နိုင်ပါ ။ တောင်းဆိုမှုကိုကွပ်မျက်ခြင်း အဆင့်တွင်တကယ့်အချိန်ကုန်ဆုံးထိန်းချုပ်မှု (i.e. curl_multi_exec နှင့် curl_maxec နှင့် curl_multi_select )
ရိုးရိုးလေးပြောရရင်အချိန်ကုန်ထိန်းချုပ်မှုကမူတည်တယ်။
တစ်ခုတည်းဆံပင်ကောက်ကောက်ပေါ်တွင်အချိန်ကုန်ထားပါ
Execute loop တွင်စုစုပေါင်းအချိန်ကိုမှတ်တမ်းတင်ပါ
ဒီမှာလက်တွေ့ကျဥပမာတစ်ခုပါ။ https://gitbox.net/api/api/api/Api/Eendpoint1 နှင့် https://gitbox.net/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/point2 ကိုတောင်းခံရန်တောင်းဆိုမှုများရှိသည်ဆိုပါစို့။
<?php
// နှစ်ခုဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');
// တစ်ခုချင်းစီကိုတောင်းဆိုမှုတစ်ခုချင်းစီကိုသီးခြားစီသတ်မှတ်ထားပါ(မလုပ်မနေရမဟုတ်သော)
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_TIMEOUT, 8); // လူတစ် ဦး လျှင်အများဆုံးတောင်းဆိုမှုများ8စက်ဏန့်
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_TIMEOUT, 8);
// a cURL 批处理လက်ကိုင်
$mh = curl_multi_init();
// 添加လက်ကိုင်到批处理လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// အသုတ်အပြောင်းအလဲနဲ့လုပ်ဆောင်ပါ
$startTime = microtime(true);
$timeout = 10; // စုစုပေါင်းအချိန်ကုန်(စက်ဏန့်)
do {
$status = curl_multi_exec($mh, $active);
// တက်ကြွစွာဆက်သွယ်မှုရှိနေသေးလျှင်
if ($active) {
// ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်း
$n = curl_multi_select($mh, 1.0);
// လှျင် select ပြန်လာ -1,အလုပ်များစောင့်ဆိုင်းရှောင်ကြဉ်ပါ
if ($n === -1) {
usleep(100000); // အိပ်နေခြင်း100毫စက်ဏန့်
}
}
// အချိန်ကုန်ရှိမရှိစစ်ဆေးပါ
if ((microtime(true) - $startTime) > $timeout) {
echo "တောင်းဆိုရန်စုစုပေါင်းအချိန်ကျော်လွန်{$timeout}စက်ဏန့်,အတင်းအဓမ္မပြတ်တောက်ခြင်း。\n";
break;
}
} while ($active && $status == CURLM_OK);
// ရလဒ်ကိုဖတ်ပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 关闭လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
curl_close($ch1);
curl_close($ch2);
// ရလဒ်များကိုပုံနှိပ်
echo "Response 1: " . substr($response1, 0, 100) . "...\n";
echo "Response 2: " . substr($response2, 0, 100) . "...\n";
?>
curlopt_tilout သည် တောင်းဆိုမှုတစ်ခုတည်း၏ အချိန်ကုန်ကိုထိန်းချုပ်သည်။
Microtime (True) ကိုမှတ်တမ်းတင်ခြင်းအားဖြင့် စုစုပေါင်းကွပ်မျက်အချိန်ကို ကိုယ်တိုင်ထိန်းချုပ်ထားသည်။
curl_multi_select ကို အသုံးပြုသောအခါ CPU အသုံးပြုမှုကိုရှောင်ရှားရန်သင့်လျော်သောအချိန်ကုန်လွှာတန်ဖိုး (1 စက္ကန့်) ကိုသတ်မှတ်ပါ။
curl_multi_close သည်အရင်းအမြစ်များကိုသန့်ရှင်းရေးအတွက်သာတာဝန်ရှိကြောင်းနှင့် အချိန်ကုန်လွှာယုတ္တိဗေဒကိုမထိန်းချုပ်နိုင်ပါ ။
အကယ်. သင်တိုတောင်းလွန်းသည့်အချိန်ကိုရွေးချယ်ပါ။
Rearl_Multi_select -11111 ကို ပြန်ပို့ပါ။
အချိန်ကုန်ဆုံးသောအခါအရင်းအမြစ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်မပြီးဆုံးသေးသောတောင်းဆိုချက်ကိုကြိုတင်ပြင်ဆင်ရန်အကောင်းဆုံးဖြစ်သည်။