curl_multi_ * လုပ်ဆောင်ချက်များကိုတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများပြုလုပ်ရန်လုပ်ဆောင်သည့်အခါများသောအားဖြင့်ကျွန်ုပ်တို့သည်များသောအားဖြင့် ဆံပင် ကောက်ကောက်အမျိုးမျိုးကိုဖွင့်ပြီးစည်းမျဉ်းစည်းကမ်းများအတွက် curl_multi လက်ကိုင်ကိုထည့်သွင်းထားသည်။
curl_multi_multi_close ကိုမခေါ်မီတောင်းဆိုမှုများအားလုံးကိုမှန်ကန်စွာပြီးစီးနိုင်စေရန်အတွက်အရင်းအမြစ်များကိုဖြန့်ချိရန်တောင်းဆိုခြင်းအတွက်တောင်းဆိုမှုတစ်ခုစီ၏ကွပ်မျက်မှုအခြေအနေကိုမှန်ကန်စွာစစ်ဆေးရန်လိုအပ်သည်။ ဤဆောင်းပါးသည်ဤလိုအပ်ချက်ကိုရရှိရန်စံနှင့်ယုံကြည်စိတ်ချရသောနည်းကိုရှင်းပြပါမည်။
များသောအားဖြင့်ကျွန်ုပ်တို့သည်တောင်းဆိုမှုများကိုကိုင်တွယ်ရန်အောက်ပါအဆင့်များကိုလိုက်နာသည်။
မျိုးစုံ ဆံပင်ကောက်ကောက် သီးခြားလက်ကိုင်အစပျိုး။
ဤလက်ကိုင်များကို curl_multi လက်ကိုင်သို့ထည့်ပါ။
curl_multi_exec ကိုအသုံးပြုပြီးတောင်းဆိုမှုများကိုစဉ်ဆက်မပြတ်တောင်းဆိုမှုများကိုဆက်လုပ်ပါ။
Curl_multi_exec နှင့်ဆက်သွယ်ရန် curl_multi_exec နှင့်ဆက်သွယ်ပါ။
ဖယ်ရှားပြီးပြီးစီးခဲ့တောင်းဆိုမှုကိုတ ဦး တည်းအားဖြင့်တ ဦး တည်းကိုင်တွယ်။
တောင်းဆိုမှုများအားလုံးပြီးဆုံးကြောင်းသေချာပါစေ, ထို့နောက် curl_multi_close ဟုခေါ်သည်။
ဤတွင်ကျွန်ုပ်တို့သည် URLs မျိုးစုံကိုတောင်းဆိုရန်လိုအပ်သည်ဟုယူဆသောပြည့်စုံသောဥပမာတစ်ခုမှာ (ဤနေရာတွင် https://gitbox.net/exament1 နှင့် https://gitbox.net/example2 ကို ဥပမာအဖြစ်ယူဆသည်။
<?php
// ဖြစ်ပေါ်လာခြင်း cURL multi လက်ကိုင်
$multiHandle = curl_multi_init();
// တစ်ခုချင်းစီကိုသိမ်းထားပါ cURL လက်ကိုင်的数组
$curlHandles = [];
// တောင်းဆိုရန် URL စာရင်း
$urls = [
'https://gitbox.net/example1',
'https://gitbox.net/example2',
];
// တစ်ခုချင်းစီကိုဖန်တီးနှင့်ထည့်ပါ cURL လက်ကိုင်
foreach ($urls as $i => $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[$i] = $ch;
}
// ကရိယာတန်းဆာ multi မေးမြန်း
$running = null;
do {
$status = curl_multi_exec($multiHandle, $running);
// တားဆီး CPU ပျင်းရိသော
if ($status == CURLM_OK) {
curl_multi_select($multiHandle);
} else {
break;
}
// 检查是否有已完成的မေးမြန်း
while ($info = curl_multi_info_read($multiHandle)) {
if ($info['msg'] == CURLMSG_DONE) {
// 获取完成的လက်ကိုင်
$completedHandle = $info['handle'];
// ပြန်လာသောအကြောင်းအရာကိုရယူပါ
$response = curl_multi_getcontent($completedHandle);
// ပြန်လာသောအချက်အလက်များကိုဤနေရာတွင်ပြုလုပ်နိုင်သည်
echo "မေးမြန်း完成,ဒေတာအရှည်ပြန်လာ:" . strlen($response) . PHP_EOL;
// 移除并关闭已完成的လက်ကိုင်
curl_multi_remove_handle($multiHandle, $completedHandle);
curl_close($completedHandle);
}
}
} while ($running > 0);
// နောက်ဆုံးအနီးကပ် multi လက်ကိုင်
curl_multi_close($multiHandle);
curl_multi_exec : တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုအကောင်အထည်ဖော်ခြင်းနှင့်အပြေးရှိသေးသည့်ဆက်သွယ်မှုအရေအတွက်ကိုပြန်ပို့ပါ။
CURL_Multi_Select - CPU အရင်းအမြစ်များစွန့်ပစ်ပစ္စည်းများကိုလျှော့ချရန်တက်ကြွစွာဆက်သွယ်မှုများကိုပိတ်ဆို့ရန်နှင့်စောင့်ဆိုင်းလေ့ရှိသည်။
curl_multi_info_read : တောင်းဆိုမှုတစ်ခုပြီးစီးခြင်းရှိမရှိစစ်ဆေးပြီးပြီးပြည့်စုံသောလက်ကိုင်များကိုတစ်ကြိမ်တွင်ပြုလုပ်နိုင်သည်။
curl_multi_close ကို $ running == 0 နှင့် Clone လက်ကိုင်လက်ကိုင်အားလုံးကိုဖယ်ရှားပြီးပိတ်လိုက်သည်။
တောင်းဆိုမှုများစွာရှိလျှင်အချို့သောတောင်းဆိုမှုများကိုအချိန်ကြာမြင့်စွာမမှီအောင်တားဆီးရန်အချိန်ကုန်ယန္တရားတစ်ခုထည့်ရန်အကြံပြုသည်။
curl_multi_select သည် တစ်ခါတစ်ရံတွင်ပြန်လည်ရောက်ရှိသည် .1 ဤကိစ္စတွင်သင် STAY LOOP ကိုကာကွယ်ရန်စောင့်ဆိုင်းနေသည့်အတွက် USleep () ကို သုံးရန်လိုအပ်သည်။
if (curl_multi_select($multiHandle) == -1) {
usleep(100);
}
၎င်းသည် script သည်ပိုမိုအားကောင်းနေကြောင်းသေချာစေသည်။
curl_multi_close မသုံးမီသော့ချက်သည် Subrequests အားလုံးကိုမှန်ကန်စွာသန့်ရှင်းစင်ကြယ်စွာသန့်ရှင်းစင်ကြယ်ကြောင်းအတည်ပြုရန်ဖြစ်သည်။ အထက်ပါပုံစံသည်ဘုံနှင့်အကြံပြုသည့်စံလေ့ကျင့်မှုဖြစ်သည်။
curl_multi_ * စီးရီး၏အပြုအမူကိုနားလည်ခြင်းသည်ပိုမိုထိရောက်သောနှင့်တည်ငြိမ်သောတစ်ပြိုင်နက်တည်းကွန်ယက်တောင်းဆိုမှုကုဒ်ကိုရေးရန်ကူညီလိမ့်မည်။